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 [email protected] -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

                                          b158a4f22808        2 weeks ago         113 MB

ubuntu                                          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

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

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

invalid reference format: repository name must be lowercase

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

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  重新命名
docker tag efeb4214cfc4 compareserverv1.0

5.查看日志

sudo docker logs -f 容器id

6.如何开机启动docker容器

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

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

前提有两个:

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

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

//docker start 
docker update --restart=no 

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

  • docker容器里直接运行GUI程序
  • 网页方式运行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  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  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 [email protected] -p10022
[email protected]'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/目录中的文件

你可能感兴趣的:(docker使用)