#查看Docker相关信息来验证是否正确安装了Docker docker version #配置Docker镜像加速 vim /etc/docker/daemon.json {"registry-mirrors":["https://registry.docker-cn.com"] } #启动第一个容器 docker run hello-world
[root@localhost admin]# docker run ubuntu:15.10 /bin/echo "Hello world" Hello world #其中ubuntu:15.10为所指定的要运行的镜像,Docker会首先从本地主机上查找镜像是否存在,若不存在,Dockwe就会从镜像仓库中下载公共镜像 # /bin/echo "Hello world"为在启动的容器里执行的命令
运行交互式的容器
通过Docker的两个参数-i -t,可以让Docker运行的容器实现交互式对话的能力:
1 2 3 4 5 6 7 8 9 10 11 12 13
[root@localhost admin]# docker run -i -t ubuntu:15.10 /bin/bash root@7cf8cc6326f7:/# #此时已经进入了一个ubuntu:15.10系统的容器 #查看当前系统的版本信息 root@7cf8cc6326f7:/# cat /proc/version Linux version 3.10.0-1160.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Mon Oct 19 16:18:59 UTC 2020 #查看当前目录下的文件列表 root@7cf8cc6326f7:/# ls bin dev home lib64 mnt proc run srv tmp var boot etc lib media opt root sbin sys usr #可以通过运行exit命令或使用Ctrl+D来退出容器 root@7cf8cc6326f7:/# exit exit
后台模式启动容器
使用以下命令可以创建一个以进程方式运行的容器:
1 2 3
[root@localhost admin]# docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1;done" #输出的长字符串为容器的ID a26fa474ed2743ad2413c5e9c828faafa141ab1ec11ba3ffaf424de658b785de
容器ID对每个容器来说都是唯一的,可以通过容器ID来查看对应的容器发生了什么。
另外打开一个终端,用docker ps查看容器是否进行:
1 2 3 4 5 6 7 8 9 10 11
[root@localhost admin]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 54539564169f ubuntu:15.10 "/bin/bash" 31 seconds ago Up 30 seconds nostalgic_jennings
[root@localhost admin]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE runoob/centos 6.7 461a6483b47b 12 minutes ago 191MB nginx latest 88736fe82739 2 weeks ago 142MB ubuntu latest a8780b506fa4 4 weeks ago 77.8MB hello-world latest feb5d9fea6a5 14 months ago 13.3kB centos latest 5d0da3dc9764 14 months ago 231MB centos 6.7 9f1de3c6ad53 3 years ago 191MB ubuntu 15.10 9b9cb95443b5 6 years ago 137MB training/webapp latest 6fae60ef3446 7 years ago 349MB
现在可以使用新的镜像来创建容器:
1 2 3
[root@localhost admin]# docker run -t -i runoob/centos:6.7 /bin/bash [root@c256ace5a3db /]# id runoob uid=500(runoob) gid=500(runoob) groups=500(runoob)
可以看到新镜像已经包含创建的用户runoob。
设置镜像标签
使用docker tag 命令可以为镜像添加一个新的标签:
1 2 3 4 5 6 7 8 9 10 11 12
root@localhost admin]# docker tag 461a6483b47b runoob/centos:dev [root@localhost admin]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE runoob/centos 6.7 461a6483b47b 21 minutes ago 191MB runoob/centos dev 461a6483b47b 21 minutes ago 191MB nginx latest 88736fe82739 2 weeks ago 142MB ubuntu latest a8780b506fa4 4 weeks ago 77.8MB hello-world latest feb5d9fea6a5 14 months ago 13.3kB centos latest 5d0da3dc9764 14 months ago 231MB centos 6.7 9f1de3c6ad53 3 years ago 191MB ubuntu 15.10 9b9cb95443b5 6 years ago 137MB training/webapp latest 6fae60ef3446 7 years ago 349MB
容器的日常管理
启动容器
最简单的运行一个容器:docker run nginx
使用ubuntu镜像启动一个容器,参数以命令行模式进入该容器:docker run -it ubuntu /bin/bash(-it是指交互式终端)
快速启动容器:docker run centos:latest /usr/bin/sleep 20
注意:容器内的第一个进程必须一直处于运行的状态,否则这个容器,就会处于退出状态!
查看正在运行的容器:docker container ls
查看容器详细信息/id:docker container inspect 容器名称/id
启动已停止运行的容器
查看所有容器(包括未运行的):docker ps -a
启动一个已停止运行的容器:docker start 容器名称/id
自命名启动一个容器:docker run --name ubuntu-test ubuntu /bin/bash
让ubuntu-test容器在后台运行:docker run -itd --name ubuntu-test ubuntu /bin/bash
[root@localhost admin]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8294ae65cc73 training/webapp "python app.py" 49 seconds ago Up 47 seconds 0.0.0.0:32768->5000/tcp hardcore_brown
[root@localhost admin]# docker start 743a62b49b70 743a62b49b70 [root@localhost admin]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 743a62b49b70 training/webapp "python app.py" 14 minutes ago Up 14 seconds 0.0.0.0:5000->5000/tcp infallible_allen 8294ae65cc73 training/webapp "python app.py" 24 minutes ago Up 24 minutes 0.0.0.0:32768->5000/tcp hardcore_brown
移除WEB应用容器
使用docker rm 命令来删除不需要的容器:
1 2 3 4 5 6 7 8 9 10 11
#删除容器时,容器必须是停止状态,否则会报以下错误 [root@localhost admin]# docker rm 743a62b49b70 Error response from daemon: You cannot remove a running container 743a62b49b70f9575690e2b85d4ea1eed94dd19fe9f6074f1d7069d977a2ecc8. Stop the container before attempting removal or force remove
t@localhost admin]# docker stop 743a62b49b70 743a62b49b70 [root@localhost admin]# docker rm 743a62b49b70 743a62b49b70 [root@localhost admin]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8294ae65cc73 training/webapp "python app.py" 26 minutes ago Up 26 minutes 0.0.0.0:32768->5000/tcp hardcore_brown
[root@localhost admin]# docker volume ls DRIVER VOLUME NAME
创建卷后挂载
创建一个卷:
1 2 3 4 5
[root@localhost admin]# docker volume create 8bbaf77b6495bbc8e50e75dfbd945badc0fdd2d2aced2359dc8d97308fa08d92 [root@localhost admin]# docker volume ls DRIVER VOLUME NAME local 8bbaf77b6495bbc8e50e75dfbd945badc0fdd2d2aced2359dc8d97308fa08d92
指定卷名:
1 2 3 4 5 6
[root@localhost admin]# docker volume create --name clsn clsn [root@localhost admin]# docker volume ls DRIVER VOLUME NAME local 8bbaf77b6495bbc8e50e75dfbd945badc0fdd2d2aced2359dc8d97308fa08d92 local clsn
[root@localhost admin]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 62888e6365e6 training/webapp "python app.py" 4 minutes ago Up 4 minutes 0.0.0.0:32769->5000/tcp web ef6af7333f0a training/postgres "su postgres -c '/us…" 7 minutes ago Up 7 minutes 5432/tcp db
root@5f57b7dcc730:/opt/webapp# apt-get install -yqq inetutils-ping root@5f57b7dcc730:/opt/webapp# ping db PING db (172.17.0.2): 56 data bytes 64 bytes from 172.17.0.2: icmp_seq=0 ttl=64 time=0.740 ms 64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.089 ms 64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.075 ms
用ping来测试db容器,它会解析成172.17.0.2。
注意:官方的Ubuntu镜像默认没有安装ping,因此需要自行安装。
用户可以链接多个父容器到子容器,比如可以链接多个web到db容器上。
通过局域网络连接容器
由于 centos-ssh镜像已失效,因此,上述步骤更新为如下:
创建名为t-net的网络
1 2 3 4 5 6 7 8
[root@localhost admin]# docker network create -d bridge t-net #其中-d表示网络类型,默认为bridge # 列出当前主机下所有网络 [root@localhost admin]# docker network ls NETWORK ID NAME DRIVER SCOPE
fee646ecddfa t-net bridge local ebdcdb71d1ba test-net bridge local
[root@localhost admin]# docker login Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one. Username: tangmenjue Password: Login Succeeded
#查看目前已有的镜像 root@localhost admin]# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE centos latest 5d0da3dc9764 14 months ago 231MB centos 6.7 9f1de3c6ad53 3 years ago 191MB centos 6.8 82f3b5f3c58f 3 years ago 195MB ubuntu 15.10 9b9cb95443b5 6 years ago 137MB training/webapp latest 6fae60ef3446 7 years ago 349MB training/postgres latest 6fa973bb3c26 8 years ago 365MB #给ubuntu:15.10镜像打上标签,以下的tangmenjue都要替换成自己的Docker账号用户名 [root@localhost admin]# docker tag ubuntu:15.10 tangmenjue/ubuntu:15.10 #查看镜像的变化 [root@localhost admin]# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE centos latest 5d0da3dc9764 14 months ago 231MB centos 6.7 9f1de3c6ad53 3 years ago 191MB centos 6.8 82f3b5f3c58f 3 years ago 195MB ubuntu 15.10 9b9cb95443b5 6 years ago 137MB tangmenjue/ubuntu 15.10 9b9cb95443b5 6 years ago 137MB training/webapp latest 6fae60ef3446 7 years ago 349MB training/postgres latest
#将自己的镜像推送到Docker Hub
[root@localhost admin]# docker push tangmenjue/ubuntu:15.10 The push refers to repository [docker.io/tangmenjue/ubuntu] 98d59071f692: Pushed af288f00b8a7: Pushed 4b955941a4d0: Mounted from library/ubuntu f121afdbbd5d: Pushed 15.10: digest: sha256:cc56b237986f2b9282f058cc7875ff5e9d0d9081934c8982ea1ec21288eeefeb size: 1150 [root@localhost admin]# docker search tangmenjue/ubuntu NAME DESCRIPTION STARS OFFICIAL AUTOMATED tangmenjue/ubuntu 0