docker使用

centos7离线安装docker

https://blog.csdn.net/liumiaocn/article/details/78349005

pull镜像

网易云镜像:https://c.163yun.com/hub#/m/home/


docker使用

1.运行

  • 通过镜像方式启动,但每次都不会保存环境,并且会重新生成container
docker run -itd -p 8012:8012 -p 10022:22 -v /home/stfz/compareserver:/home/stfz/compareserver   82fdb0d63727
  • docker run命令带--rm命令选项,等价于在容器退出后,执行docker rm -v
  • 想在docker内部调试gdb解决办法就是create和run的时候带上--cap-add sys_ptrace
docker run -itd  --cap-add sys_ptrace -p 10021:22 -p 8083:80 destop-ubuntu
ssh root@127.0.0.1 -p 10022 //常用密码1
图片1.png

root@82fdb0d63727中82fdb0d63727为container id

  • 启动容器
root@stfz-desktop:/home/stfz# docker ps -a 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                   NAMES
ac5ee2395c0b        0da2d5d21bf0        "/usr/bin/supervisord"   16 hours ago        Exited (0) 16 minutes ago                           hungry_feynman
58ae15439a51        290532a393b4        "/usr/bin/supervisord"   17 hours ago        Up 16 minutes               0.0.0.0:10022->22/tcp   jolly_cray
50e81169b3d7        1196ea15dad6        "/usr/bin/supervisord"   3 days ago          Exited (0) 3 days ago                               wizardly_visvesvaraya
51c9b85bbc08        1196ea15dad6        "/usr/bin/supervisord"   3 days ago          Exited (139) 3 days ago                             sharp_lewin
e7d45646d5d3        1196ea15dad6        "/usr/bin/supervisord"   3 days ago          Exited (0) 3 days ago                               affectionate_dijkstra

sudo docker start ac5ee2395c0b
  • 进入容器

docker exec -it ac5ee2395c0b /bin/bash
-i: --interactive(相互作用的) Keep STDIN open even if not attached(即使没有连接,也要保持STDIN打开)
-t: --tty Allocate a pseudo-TTY(分配一个 冒充的终端设备)
/bin/bash:启动bash

2.删除

删除image

stfz@stfz-desktop:~$ sudo docker images

REPOSITORY                        TAG                 IMAGE ID            CREATED             SIZE

ssh-ubuntu                        latest              c3d84cb2121b        11 minutes ago      243 MB

ubuntu                            16.04               5e8b97a2a082        30 hours ago        114 MB

<none>                            <none>              b158a4f22808        2 weeks ago         113 MB

ubuntu                            <none>              0b1edfbffd27        5 weeks ago         113 MB

daocloud.io/daocloud/tensorflow   latest              414b6e39764a        3 months ago        1.27 GB

想要删除image b158a4f22808

stfz@stfz-desktop:~$ sudo docker rmi b158a4f22808

Error response from daemon: conflict: unable to delete b158a4f22808 (must be forced) - image is being used by stopped container c231431cf51b

如上提示镜像被容器c231431cf51b使用,提示你先删除容器

stfz@stfz-desktop:~$ sudo docker rm c231431cf51b

c231431cf51b

然后再删除image

stfz@stfz-desktop:~$ sudo docker rmi b158a4f22808

Deleted: sha256:b158a4f228085185f368baeb835f59b7e17ed19c04a0d30b726b1475755a7642

Deleted: sha256:89dbaf474a29ea90bac43021468c290b20f0cd165a89cea1c5612c4fee91780b

3.制作新的镜像

到此,我们需要把这个带有ssh服务的容器提交成一个镜像,方便以后在这个基础上各种改造:
docker commit <container id> <image name>

stfz@stfz-desktop:~$ sudo docker commit b670b2beaf8c ssh-ubuntu

image name不可以大写字母,否则出现:

invalid reference format: repository name must be lowercase

疑问:每次想保存都需要commit一下吗?
解答:不需要,利用docker start <container id>,而不是docker run <image id>

4.保存镜像

docker save 24aae4d0c04c > /home/stfz/compareserver-docker.tar ,然后把此归纳文件拷贝到任意你想要的地方(比如 u盘 移动硬盘 电脑等)

在需要还原docker image的主机执行:sudo docker load < compareserver-docker.tar (宿主机必须装有docker)
提示 Loaded image: compareserver-docker.ta 表示加载成功,我们就可以级继续使用这个docker 镜像啦

//用docker tag <image_id> 重新命名
docker tag efeb4214cfc4 compareserverv1.0

5.查看日志

sudo docker logs -f 容器id

6.如何开机启动docker容器

宿主机重启后自动启动容器

可以执行如下命令设置--restart=always,使得重启宿主机后,还会自动启动该容器。

前提有两个:

  • 宿主机system enable docker。就是说:宿主机开机时,会自动启动docker服务。
  • 已经docker start了该container
// docker start <name>
docker update --restart=always <name>

同理,如果不想让这个容器随着宿主机重启而重启的话,则应该设置--restart=no

//docker start <name>
docker update --restart=no <name>

7.在Linux平台上运行Docker GUI程序

ubuntu docker 开启ssh

直接从网易蜂巢上下载已经装好各种工具的ubuntu镜像https://blog.csdn.net/qq_27068845/article/details/77015432

传输文件

示例命令:
 docker cp 本地主机文件路径/或者文件夹 nginx容器id://usr/share/nginx/html
完整命令:
 docker cp index.html 756a94bed476://usr/share/nginx/html

8. docker

Docker的网络模板有点类似我们平常使用虚拟机的host-only模式,容器和宿主机组成一个独立的局域网,宿主机的IP为172.17.0.1,对应主机的网络名称为docker0

root@inspiron-3670:~# ifconfig
docker0   Link encap:以太网  硬件地址 02:42:90:f0:8a:db  
          inet 地址:172.17.0.1  广播:172.17.255.255  掩码:255.255.0.0
          inet6 地址: fe80::42:90ff:fef0:8adb/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  跃点数:1
          接收数据包:146715 错误:0 丢弃:0 过载:0 帧数:0
          发送数据包:596336 错误:0 丢弃:0 过载:0 载波:0
          碰撞:0 发送队列长度:0 
          接收字节:644721526 (644.7 MB)  发送字节:568274789 (568.2 MB)

enp2s0    Link encap:以太网  硬件地址 8c:ec:4b:bb:da:df  
          inet 地址:192.168.20.41  广播:192.168.20.255  掩码:255.255.255.0
          inet6 地址: fe80::932c:80ab:7037:fe6c/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  跃点数:1
          接收数据包:1106464847 错误:0 丢弃:6 过载:0 帧数:0
          发送数据包:4675505 错误:0 丢弃:0 过载:0 载波:0
          碰撞:0 发送队列长度:1000 
          接收字节:168711550721 (168.7 GB)  发送字节:758438621 (758.4 MB)

docker内部网络

[root@7bf53443e078 srs]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)
        RX packets 15850  bytes 23756006 (22.6 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 8560  bytes 588135 (574.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


常见错误

一. 登录出现错误:Permission denied (publickey).

生产机器默认禁用了ssh密码登录权限。

解决办法

1、登录目标机器 打开 /etc/ssh/sshd_config ,修改PasswordAuthentication no 为:

PasswordAuthentication yes

2、重启服务

/etc/init.d/sshd restart

二. docker容器故障致无法启动解决实例

修改宕机容器配置

所有的容器数据都存在/var/lib/docker/aufs/diff/路径下。下面容器ID目录,以init结尾的是放配置文件的,有/etc/host、reselv.conf,/dev等。另一个是放的文件目录,比如/home,/var/及自己安装的服务等等,aufs需要内核3.10以上的支持。

1、查看容器id

root@ubuntu:~#docker ps -a|grep iframe-test

fa02f8084b63        debian06-base:latest  

2、查找nginx.conf配置文件路径

root@ubuntu:~#find / -name 'nginx.conf'

/root/nginx.conf

/var/lib/docker/aufs/diff/7c7b3438586e0653cdca7977a4f889cfdca300f008771462f8a2e6e9d3bc5b84/etc/nginx/nginx.conf

/var/lib/docker/aufs/diff/6bc6a9a5aeb59e19cae8bb78daa481cc465051069c7854528cbfdb3c9c1f2bfb/etc/nginx/nginx.conf

/var/lib/docker/aufs/diff/c7b6b87cfda72701229eebca868eb047aa01c255b62e56ad223dc75396c584e4/etc/nginx/nginx.conf

/var/lib/docker/aufs/diff/fa02f8084b631c371c6c050e5f0315017d327f84746b064246803a6a90a39456/etc/nginx/nginx.conf

3、进入对应容器id的目录,修改问题文件

root@ubuntu:cd /var/lib/docker/aufs/diff/fa02f8084b631c371c6c050e5f0315017d327f84746b064246803a6a90a39456

执行ls命令,容器的根目录展现在面前,是不是很熟悉?

root@ubuntu:/var/lib/docker/aufs/diff/fa02f8084b631c371c6c050e5f0315017d327f84746b064246803a6a90a39456#ls

etc  root run  srv  tmp usr  var

接下来找到这个容器里面nginx.conf的语法错误处修改。

4、修改后启动容器

root@ubuntu:~# docker start iframe-test

 

root@ubuntu:~# docker ps |grep iframe-test

fa02f8084b63        debian06-base:latest        "/etc/rc.local"     6 weeks ago         Up 13 minutes       10.18.103.2:22->22/tcp,10.18.103.2:80->80/tcp, 10.18.103.2:443->443/tcp,10.18.103.2:3306->3306/tcp, 10.18.103.2:6379->6379/tcp,10.18.103.2:6381->6381/tcp, 10.18.103.2:8000->8000/tcp,10.18.103.2:8888->8888/tcp                                                                                                                                  iframe-test 

 

容器启动成功,问题解决。以后再也不用担心docker容器坏掉,导致数据丢失了。

三.解决ssh登陆到docker容器自动退出的问题

情况如下:

[root@localhost docker]# ssh root@127.0.0.1 -p10022
root@127.0.0.1's password: 
Welcome to Ubuntu Xenial Xerus (development branch) (GNU/Linux 3.10.0-957.el7.x86_64 x86_64)

 * Documentation:  https://help.ubuntu.com/
Last login: Tue Jul 16 10:53:37 2019 from 172.17.0.1
Connection to 127.0.0.1 closed.
[root@localhost docker]# 

看了网上的解决办法用docker attach或者docker exec登录然后修改/etc/ssh/sshd_config中UsePAM yes字段为UsePAM no,但是两种方法都登不上去,无奈在源镜像中修改后导入新的镜像,最后该问题解决

四. 解决docker容器存放目录磁盘空间满了问题

docker所在服务器,运行了一段时间后,发现服务器磁盘目录快不够用了。通过du -h --max-depth=1 / 逐级目录排查,发现/var/lib/docker目录文件过大。通过以下方法,解决该问题。

转移数据修改docker默认存储位置

有多种方式修改docker默认存储位置。
最好是在docker安装完后,第一时间修改docker默认存储位置为其他大目录或者磁盘中。规避迁移数据过程中造成的风险。

  • 停止docker服务
  systemctl stop docker

*创建新的docker目录,执行命令df -h,找一个大的磁盘
我在 /home目录下面建了/home/modules/docker/lib目录

     mkdir -p /home/modules/docker/lib
  • 迁移/var/lib/docker目录下面的文件到/home/modules/docker/lib
    迁移后的完成docker路径:/home/modules/docker/lib/docker
rsync -avz /var/lib/docker/ /home/modules/docker/lib/
  • 配置 /etc/systemd/system/docker.service.d/devicemapper.conf
    查看/etc/systemd/system/docker.service.d目录及devicemapper.conf是否存在。如果不存在,就新建
mkdir -p /etc/systemd/system/docker.service.d/
vi /etc/systemd/system/docker.service.d/devicemapper.conf

devicemapper.conf添加如下内容:

    [Service]
    ExecStart=
    ExecStart=/usr/bin/dockerd  --graph=/home/modules/docker/lib/docker
  • 重启docker
systemctl daemon-reload
systemctl restart docker
systemctl enable docker
  • 确认Docker Root Dir修改是否已经生效
    [root@iZbp1jcwx7sfb1yrnvpg84Z docker]# docker info
    ...
    Docker Root Dir: /home/modules/docker/lib/docker
    Debug Mode (client): false
    Debug Mode (server): false
    Registry: https://index.docker.io/v1/
    ...
  • 启动成功后,再确认之前的镜像是否还在
    [root@iZbp1jcwx7sfb1yrnvpg84Z docker]# docker images
    REPOSITORY                          TAG                 IMAGE ID            CREATED             SIZE
    10.80.177.233/policy                2.1.2               64ac4e178cd2        2 hours ago         818 MB
    10.80.177.233/crm                   2.1.3               d7636fbb7a29        2 hours ago         762 MB

确定容器没问题后删除/var/lib/docker/目录中的文件

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342