目录

1.docker的启动、停止、重启

2.创建一个新的容器并运行一个命令

3-1.docker启动的容器列表

3-2.查看docker创建的所有容器

4.启动、停止、重启某个docker 容器

5.查看指定容器的日志记录

6.删除某个容器,若正在运行,需要先停止

7.删除所有容器

8.从Docker Hub查找镜像

9.从镜像仓库中拉取或者更新指定镜像

10. 列出本地镜像。

11.删除本地一个或多少镜像。

12.在运行的容器中执行命令

13.用于容器与主机之间的数据拷贝

14.查看容器IP地址

15. 端口映射与容器互联

16.run 多条命令


1.docker的启动、停止、重启

[root@localhost ~]# service docker restart
Redirecting to /bin/systemctl restart docker.service
[root@localhost ~]# service docker stop
Redirecting to /bin/systemctl stop docker.service
[root@localhost ~]# service docker start
Redirecting to /bin/systemctl start docker.service

2.创建一个新的容器并运行一个命令

语法  docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

OPTIONS说明:

  • -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;

  • -d: 后台运行容器,并返回容器ID;

  • -i: 以交互模式运行容器,通常与 -t 同时使用;

  • -p: 端口映射,格式为:主机(宿主)端口:容器端口

  • -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;

  • --name="nginx-lb": 为容器指定一个名称;

  • --dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;

  • --dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;

  • -h "mars": 指定容器的hostname;

  • -e username="ritchie": 设置环境变量;

  • --env-file=[]: 从指定文件读入环境变量;

  • --cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;

  • -m :设置容器使用内存最大值;

  • --net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;

  • --link=[]: 添加链接到另一个容器;

  • --expose=[]: 开放一个端口或一组端口;

实例

使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx。

docker run --name mynginx -d nginx:latest

使用镜像nginx:latest以后台模式启动一个容器,并将容器的80端口映射到主机随机端口。

docker run -P -d nginx:latest

使用镜像 nginx:latest,以后台模式启动一个容器,将容器的 80 端口映射到主机的 80 端口,主机的目录 /data 映射到容器的 /data。

docker run -p 80:80 -v /data:/data -d nginx:latest

绑定容器的 8080 端口,并将其映射到本地主机 127.0.0.1 的 80 端口上。

$ docker run -p 127.0.0.1:80:8080/tcp ubuntu bash

使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。

runoob@runoob:~$ docker run -it nginx:latest /bin/bash
root@b8573233d675:/# 

3-1.docker启动的容器列表

[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
724e7701f0d4        centos              "/bin/bash"         4 minutes ago       Up 4 minutes                            yufei_6
f9097691663e        centos              "/bin/bash"         5 minutes ago       Up 5 minutes                            yufei_5
[root@localhost ~]# 

3-2.查看docker创建的所有容器

[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                        PORTS               NAMES
724e7701f0d4        centos              "/bin/bash"         5 minutes ago       Up 5 minutes                                      yufei_6
f9097691663e        centos              "/bin/bash"         6 minutes ago       Up 6 minutes                                      yufei_5
e59a540fb979        centos              "/bin/base"         6 minutes ago       Created                                           yufei_4
ff49dfedea4f        centos              "/bin/bash"         2 hours ago         Exited (137) 10 minutes ago                       yufei_03
d2cc70abb5a5        centos              "/bin/bash"         2 hours ago         Exited (127) 2 hours ago                          yufei_02
2d48fc5b7c17        centos              "/bin/bash"         2 hours ago         Exited (127) 2 hours ago                          yufei_01
[root@localhost ~]# 

docker ps 默认列表是正在启动的容器 -a是显示所有创建的容器

4.启动、停止、重启某个docker 容器

[root@localhost ~]# docker start yufei_01
yufei_01
[root@localhost ~]# docker stop yufei_01
yufei_01
[root@localhost ~]# docker restart yufei_01
yufei_01
[root@localhost ~]# 

5.查看指定容器的日志记录

[root@localhost ~]# docker logs -f yufei_01
[root@2d48fc5b7c17 /]# ls
anaconda-post.log  bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@2d48fc5b7c17 /]# exit
exit
[root@2d48fc5b7c17 /]# ls
anaconda-post.log  bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@2d48fc5b7c17 /]#
[root@2d48fc5b7c17 /]#
[root@2d48fc5b7c17 /]#
[root@2d48fc5b7c17 /]#
[root@2d48fc5b7c17 /]#
[root@2d48fc5b7c17 /]#
[root@2d48fc5b7c17 /]#
[root@2d48fc5b7c17 /]# cd /
[root@2d48fc5b7c17 /]# ls
anaconda-post.log  bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@2d48fc5b7c17 /]# mkdir yufei
[root@2d48fc5b7c17 /]# ls
anaconda-post.log  bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var  yufei
[root@2d48fc5b7c17 /]# cd yufei
[root@2d48fc5b7c17 yufei]# ls
yufei
[root@2d48fc5b7c17 yufei]# cd yufei
[root@2d48fc5b7c17 yufei]# ls
application
[root@2d48fc5b7c17 yufei]# cd ../../
[root@2d48fc5b7c17 /]# rm -rf yufei
[root@2d48fc5b7c17 /]# eixt
bash: eixt: command not found
[root@2d48fc5b7c17 /]# exit

6.删除某个容器,若正在运行,需要先停止

[root@localhost ~]# docker rm yufei_01
Error response from daemon: You cannot remove a running container 2d48fc5b7c17b01e6247cbc012013306faf1e54f24651d5e16d6db4e15f92d33. Stop the container before attempting removal or use -f
[root@localhost ~]# docker stop yufei_01
yufei_01
[root@localhost ~]# docker rm yufei_01
yufei_01
[root@localhost ~]# 

7.删除所有容器

[root@localhost ~]# docker rm $(docker ps -a -q)
Error response from daemon: You cannot remove a running container 724e7701f0d4a830167e21f75b470235a0e408fd6cc2913403426e96f69cba11. Stop the container before attempting removal or use -f
Error response from daemon: You cannot remove a running container f9097691663ee36f9d2ee56afbdcca0eeb8b63e5590ddf18c0c42954c93b9f06. Stop the container before attempting removal or use -f
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]# docker stop yufei_6
yufei_6
[root@localhost ~]# docker stop yufei_5
yufei_5
[root@localhost ~]# docker rm $(docker ps -a -q)
724e7701f0d4
f9097691663e
[root@localhost ~]# 

8.从Docker Hub查找镜像

语法  docker search [OPTIONS] TERM

OPTIONS说明:

  • --automated :只列出 automated build类型的镜像;

  • --no-trunc :显示完整的镜像描述;

  • -s :列出收藏数不小于指定值的镜像。

实例

从Docker Hub查找所有镜像名包含java,并且收藏数大于10的镜像

runoob@runoob:~$ docker search -s 10 java
NAME                  DESCRIPTION                           STARS   OFFICIAL   AUTOMATED
java                  Java is a concurrent, class-based...   1037    [OK]
anapsix/alpine-java   Oracle Java 8 (and 7) with GLIBC ...   115                [OK]
develar/java                                                 46                 [OK]
isuper/java-oracle    This repository contains all java...   38                 [OK]
lwieske/java-8        Oracle Java 8 Container - Full + ...   27                 [OK]
nimmis/java-centos    This is docker images of CentOS 7...   13                 [OK]

9.从镜像仓库中拉取或者更新指定镜像

语法  docker pull [OPTIONS] NAME[:TAG|@DIGEST]

OPTIONS说明:

  • -a :拉取所有 tagged 镜像

  • --disable-content-trust :忽略镜像的校验,默认开启

实例

从Docker Hub下载java最新版镜像。
docker pull java
从Docker Hub下载REPOSITORY为java的所有镜像。
docker pull -a java

sudo docker pull image的名字和对应的版本号,如果不指定版本号,拉取的镜像的版本会默认为latest

拉指定版本如下:

docker pull mongo:3.2.4
docker pull redis:3.2
docker pull centos:6

10. 列出本地镜像。

语法  docker images [OPTIONS] [REPOSITORY[:TAG]]

OPTIONS说明:

  • -a :列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);

  • --digests :显示镜像的摘要信息;

  • -f :显示满足条件的镜像;

  • --format :指定返回值的模板文件;

  • --no-trunc :显示完整的镜像信息;

  • -q :只显示镜像ID。

实例

查看本地镜像列表。

runoob@runoob:~$ docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
mymysql                 v1                  37af1236adef        5 minutes ago       329 MB
runoob/ubuntu           v4                  1c06aa18edee        2 days ago          142.1 MB
<none>                  <none>              5c6e1090e771        2 days ago          165.9 MB
httpd                   latest              ed38aaffef30        11 days ago         195.1 MB
alpine                  latest              4e38e38c8ce0        2 weeks ago         4.799 MB
mongo                   3.2                 282fd552add6        3 weeks ago         336.1 MB
redis                   latest              4465e4bcad80        3 weeks ago         185.7 MB
php                     5.6-fpm             025041cd3aa5        3 weeks ago         456.3 MB
python                  3.5                 045767ddf24a        3 weeks ago         684.1 MB
...

列出本地镜像中REPOSITORY为ubuntu的镜像列表。

root@runoob:~# docker images  ubuntu
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              14.04               90d5884b1ee0        9 weeks ago         188 MB
ubuntu              15.10               4e3b13c8a266        3 months ago        136.3 MB

11.删除本地一个或多少镜像。

语法  docker rmi [OPTIONS] IMAGE [IMAGE...]

OPTIONS说明:

  • -f :强制删除;

  • --no-prune :不移除该镜像的过程镜像,默认移除;

实例

强制删除本地镜像runoob/ubuntu:v4。

root@runoob:~# docker rmi -f runoob/ubuntu:v4
Untagged: runoob/ubuntu:v4
Deleted: sha256:1c06aa18edee44230f93a90a7d88139235de12cd4c089d41eed8419b503072be
Deleted: sha256:85feb446e89a28d58ee7d80ea5ce367eebb7cec70f0ec18aa4faa874cbd97c73

12.在运行的容器中执行命令

语法  docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

OPTIONS说明:

  • -d :分离模式: 在后台运行

  • -i :即使没有附加也保持STDIN 打开

  • -t :分配一个伪终端

实例

在容器mynginx中以交互模式执行容器内/root/runoob.sh脚本

runoob@runoob:~$ docker exec -it mynginx /bin/sh /root/runoob.sh
http://www.runoob.com/

在容器mynginx中开启一个交互模式的终端  这样可以得到多个shell 同时作用于一个容器

runoob@runoob:~$ docker exec -i -t  mynginx /bin/bash
root@b1a0703e41e7:/#

13.用于容器与主机之间的数据拷贝

语法  docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-

docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH

OPTIONS说明:

  • -L :保持源目标中的链接

实例

将主机/www/runoob目录拷贝到容器96f7f14e99ab的/www目录下。

docker cp /www/runoob 96f7f14e99ab:/www/

将主机/www/runoob目录拷贝到容器96f7f14e99ab中,目录重命名为www。

docker cp /www/runoob 96f7f14e99ab:/www

将容器96f7f14e99ab的/www目录拷贝到主机的/tmp目录中。

docker cp  96f7f14e99ab:/www /tmp/

14.查看容器IP地址

#查看所有容器
docker inspect --format='{{.NetworkSettings.IPAddress}}' $(docker ps -a -q) #查看单个容器
docker inspect --format '{{ .NetworkSettings.IPAddress }}' <container-ID>
或
docker inspect <container id>
或
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id

15. 端口映射与容器互联

1、端口映射实现访问容器

1-1.从外部访问容器应用

在启动容器的时候,如果不指定对应的参数,在容器外部是无法通过网络来访问容器内部的网络应用和服务的。

当容器中运行一些网络应用,要让外部访问这些应用时,可以通过-p或-P参数来指定端口映射。当使用-P(大写P)标记时,Docker会随机映射一个端口到内部容器开放的网络端口(端口范围在Linux系统使用的端口之外,一般都过万):

[root@docker ~]# docker run -d --name nginx_1 -P nginx:latest
f769af3e98478b27b87e008f3ad785e2055da4047442c4a8dcb8f621f810dbea
[root@docker ~]# docker ps
CONTAINER ID    IMAGE        COMMAND         CREATED       STATUS       PORTS          NAMES
f769af3e9847    nginx:latest    "nginx -g 'daemon ..."  3 seconds ago    Up 2 seconds    0.0.0.0:32768->80/tcp  nginx_1
[root@docker ~]#

通过docker ps可以看到nginx_1容器的80端口被映射到本机的32768端口上。访问宿主主机的32768端口就可以访问容器内的应用程序提供的Web界面:

同样,可以通过docker logs命令查看应用信息:

[root@docker ~]# docker logs nginx_1
10.0.0.253 - - [29/Nov/2017:06:25:38 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0" "-"
10.0.0.253 - - [29/Nov/2017:06:25:39 +0000] "GET /favicon.ico HTTP/1.1" 404 169 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0" "-"
2017/11/29 06:25:39 [error] 5#5: *1 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 10.0.0.253, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "10.0.0.31:32768"
10.0.0.253 - - [29/Nov/2017:06:25:39 +0000] "GET /favicon.ico HTTP/1.1" 404 169 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0" "-"
2017/11/29 06:25:39 [error] 5#5: *1 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 10.0.0.253, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "10.0.0.31:32768"
10.0.0.253 - - [29/Nov/2017:06:26:55 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36" "-"
10.0.0.253 - - [29/Nov/2017:06:26:56 +0000] "GET /favicon.ico HTTP/1.1" 404 571 "http://10.0.0.31:32768/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36" "-"
2017/11/29 06:26:56 [error] 5#5: *2 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 10.0.0.253, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "10.0.0.31:32768", referrer: "http://10.0.0.31:32768/"
[root@docker ~]# 

-p(小写p)可以指定要映射的端口,并且在一个指定的端口上只可以绑定一个容器。支持的格式有:IP:HostPort:ContainerPort | IP::ContainerPort | HostPort:ContainerPort 。

1-2.映射所有接口地址

使用HostPort:ContainerPort格式将本地的5000端口映射到容器的5000端口:

[root@docker ~]# docker run -itd -p 5000:5000 --name nginx_2 nginx:latest
5bdca2bde33d7db72861399ca49e82f0d209d13289d20b181843da5b10e6f2d3
[root@docker ~]# docker ps
CONTAINER ID    IMAGE        COMMAND         CREATED       STATUS       PORTS              NAMES
5bdca2bde33d    nginx:latest    "nginx -g 'daemon ..."  8 seconds ago    Up 7 seconds    80/tcp, 0.0.0.0:5000->5000/tcp  nginx_2
f769af3e9847    nginx:latest    "nginx -g 'daemon ..."  15 minutes ago   Up 15 minutes    0.0.0.0:32768->80/tcp      nginx_1
[root@docker ~]# 

此时默认会绑定本地所有接口上的所有地址。多次使用-p参数可以绑定多个端口:

[root@docker ~]# docker run -itd -p 3000:2700 -p 2389:8863 --name nginx_3 nginx:latest
65fbfbe9761eb5146501311016d681f210b1891ca5f5af62dc978ad6f2a22750
[root@docker ~]# docker ps
CONTAINER ID    IMAGE        COMMAND         CREATED       STATUS       PORTS                          NAMES
65fbfbe9761e    nginx:latest    "nginx -g 'daemon ..."  3 seconds ago    Up 2 seconds    80/tcp, 0.0.0.0:3000->2700/tcp, 0.0.0.0:2389->8863/tcp  nginx_3
5bdca2bde33d    nginx:latest    "nginx -g 'daemon ..."  2 minutes ago    Up 2 minutes    80/tcp, 0.0.0.0:5000->5000/tcp              nginx_2
f769af3e9847    nginx:latest    "nginx -g 'daemon ..."  18 minutes ago   Up 18 minutes    0.0.0.0:32768->80/tcp                  nginx_1
[root@docker ~]# 

1-3.映射到指定地址的指定端口

可以使用IP:HostPort:ContainerPort格式指定映射使用一个特定地址:

[root@docker ~]# docker run -itd -p 10.0.0.31:89:8081 --name nginx_4 nginx:latest
16a476837222d413926053e1c8175c993b0495732073fbc6251dfd4696db8242
[root@docker ~]# docker ps
CONTAINER ID    IMAGE        COMMAND         CREATED       STATUS       PORTS                          NAMES
16a476837222    nginx:latest    "nginx -g 'daemon ..."  4 seconds ago    Up 3 seconds    80/tcp, 10.0.0.31:89->8081/tcp              nginx_4
65fbfbe9761e    nginx:latest    "nginx -g 'daemon ..."  2 minutes ago    Up 2 minutes    80/tcp, 0.0.0.0:3000->2700/tcp, 0.0.0.0:2389->8863/tcp  nginx_3
5bdca2bde33d    nginx:latest    "nginx -g 'daemon ..."  5 minutes ago    Up 5 minutes    80/tcp, 0.0.0.0:5000->5000/tcp              nginx_2
f769af3e9847    nginx:latest    "nginx -g 'daemon ..."  20 minutes ago   Up 20 minutes    0.0.0.0:32768->80/tcp                  nginx_1
[root@docker ~]# 

1-4.映射到指定地址的任意端口

使用IP::ContainerPort格式绑定本机的任意端口到容器的指定端口:

[root@docker ~]# docker run -itd -p 10.0.0.31::8082 --name nginx_5 nginx:latest
3436fd5fbdca6529c70c664f42edfd10d51edb0fb541b096b47c9b168887b2ca
[root@docker ~]# docker ps
CONTAINER ID    IMAGE        COMMAND         CREATED       STATUS       PORTS                          NAMES
3436fd5fbdca    nginx:latest    "nginx -g 'daemon ..."  2 seconds ago    Up 2 seconds    80/tcp, 10.0.0.31:32769->8082/tcp            nginx_5
16a476837222    nginx:latest    "nginx -g 'daemon ..."  2 minutes ago    Up 2 minutes    80/tcp, 10.0.0.31:89->8081/tcp              nginx_4
65fbfbe9761e    nginx:latest    "nginx -g 'daemon ..."  4 minutes ago    Up 4 minutes    80/tcp, 0.0.0.0:3000->2700/tcp, 0.0.0.0:2389->8863/tcp  nginx_3
5bdca2bde33d    nginx:latest    "nginx -g 'daemon ..."  7 minutes ago    Up 7 minutes    80/tcp, 0.0.0.0:5000->5000/tcp              nginx_2
f769af3e9847    nginx:latest    "nginx -g 'daemon ..."  22 minutes ago   Up 22 minutes    0.0.0.0:32768->80/tcp                  nginx_1
[root@docker ~]# 

容器启动后,本机会随机自动分配一个未被占用的端口。

1-5.查看映射端口配置

使用docker port命令来查看当前映射的端口配置,也可以查看绑定的地址

[root@docker ~]# docker port nginx_1
80/tcp -> 0.0.0.0:32768
[root@docker ~]# docker port nginx_2
5000/tcp -> 0.0.0.0:5000
[root@docker ~]# docker port nginx_3
2700/tcp -> 0.0.0.0:3000
8863/tcp -> 0.0.0.0:2389
[root@docker ~]# docker port nginx_4
8081/tcp -> 10.0.0.31:89
[root@docker ~]# docker port nginx_5
8082/tcp -> 10.0.0.31:32769
[root@docker ~]#

注意:

容器有自己的内部网络和IP地址,使用docker inspect +容器ID可以获取容器的具体信息。

2、互联机制实现便捷访问

容器的互联是一种让多个容器中应用进行快速交互的方式,它会在源和接收容器之间建立连接关系,接收容器可以通过容器名快速访问到源容器,而不用指定具体的IP地址。

2-1.自定义容器命名

连接系统依据容器的名称来执行。因此,首先要给容器定义一个简单好记的名字。在容器创建的时候,系统会随机创建一个容器名,但是并没有特殊的意义也不便于记忆,所有自定义容器名有一下亮点好处:

1.自定义的命名比较好记,比如一个Web应用容器,就可以起名web,既方便记忆也方便理解容器的作用;
2.当要连接其他容器时,即使重启,也可以使用自定义的容器名,,比如web容器连接到db容器。

使用--name参数可以为容器自定义命名:

[root@docker ~]# docker run -itd --name centos_1 centos:latest
4d58a9f6f324185caf53dbe5eaee85f35e853842ffb037cf272c2a92cee89716
[root@docker ~]# docker ps
CONTAINER ID    IMAGE        COMMAND         CREATED       STATUS       PORTS                          NAMES
4d58a9f6f324    centos:latest    "/bin/bash"       6 seconds ago    Up 5 seconds                                 centos_1
3436fd5fbdca    nginx:latest    "nginx -g 'daemon ..."  11 minutes ago   Up 11 minutes    80/tcp, 10.0.0.31:32769->8082/tcp            nginx_5
16a476837222    nginx:latest    "nginx -g 'daemon ..."  13 minutes ago   Up 13 minutes    80/tcp, 10.0.0.31:89->8081/tcp              nginx_4
65fbfbe9761e    nginx:latest    "nginx -g 'daemon ..."  15 minutes ago   Up 15 minutes    80/tcp, 0.0.0.0:3000->2700/tcp, 0.0.0.0:2389->8863/tcp  nginx_3
5bdca2bde33d    nginx:latest    "nginx -g 'daemon ..."  18 minutes ago   Up 18 minutes    80/tcp, 0.0.0.0:5000->5000/tcp              nginx_2
f769af3e9847    nginx:latest    "nginx -g 'daemon ..."  34 minutes ago   Up 34 minutes    0.0.0.0:32768->80/tcp                  nginx_1
[root@docker ~]# 

通过docker ps或者docker ps -a可以查看到容器的自定义名字,利用docker inspect也可以获取到容器自定义名字:

[root@docker ~]# docker inspect -f "{{.Name}}" 4d58a9f6f324
/centos_1
[root@docker ~]#

注意:

容器的名称是唯一的。如果已经命名了一个web的容器,当再次使用web这个命名的时候会报错,如果一定要使用,需要先用docker rm删除之前创建的web容器。

在执行docker run的时候如果添加--rm参数,则容器终止后会立刻删除。--rm参数和-d参数不能同时使用。

2-2、容器互联

使用--link参数可以让容器之间安全地进行交互。

创建一个数据库容器:

[root@docker ~]# docker run -itd --name db --env MYSQL_ROOT_PASSWORD=example mariadb
b239b124946c99b7da63e00c22df802e9612fbe8bc636389205baf6c2f6963bd
[root@docker ~]# docker ps
CONTAINER ID    IMAGE        COMMAND         CREATED       STATUS       PORTS        NAMES
b239b124946c    mariadb       "docker-entrypoint..."  3 seconds ago    Up 2 seconds    3306/tcp      db
[root@docker ~]#

创建一个web容器并将它连接到db容器:

[root@docker ~]# docker run -itd -P --name web --link db:db nginx:latest
42fa6662784010368b5e615d495e71920d85cc1bc089a5d181657514973ee90a
[root@docker ~]# docker ps
CONTAINER ID    IMAGE        COMMAND         CREATED       STATUS       PORTS        NAMES
86ef0f632ffe    nginx:latest    "nginx -g 'daemon ..."  44 seconds ago    Up 43 seconds    80/tcp       web
b239b124946c    mariadb       "docker-entrypoint..."  About a minute ago  Up 59 seconds    3306/tcp      db
[root@docker ~]# 

此时web容器已经和db容器建立互联关系:--link参数的格式为:--link name:alias,其中name是要连接的容器名称,alias是这个连接的别名。

Docker相当于在两个互联的容器之间创建了一个虚拟通道,而不用映射它们的端口到宿主机上。在启动db容器的时候并没有使用-p或者-P参数,从而避免了暴露数据库服务端口到外部网络上。

Docker通过两种方式为容器公开连接信息:

1.更新环境变量;
2.更新/etc/hosts文件。

使用env命令来查看web容器的环境变量:

[root@docker ~]# docker run --rm --name web3 --link db:db nginx:latest env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=7258de738125
DB_PORT=tcp://172.17.0.2:3306
DB_PORT_3306_TCP=tcp://172.17.0.2:3306
DB_PORT_3306_TCP_ADDR=172.17.0.2
DB_PORT_3306_TCP_PORT=3306
DB_PORT_3306_TCP_PROTO=tcp
DB_NAME=/web3/db
DB_ENV_MYSQL_ROOT_PASSWORD=example
DB_ENV_GOSU_VERSION=1.10
DB_ENV_GPG_KEYS=199369E5404BD5FC7D2FE43BCBCB082A1BB943DB   430BDF5C56E7C94E848EE60C1C4CBDCDCD2EFD2A   4D1BB29D63D98E422B2113B19334A25F8507EFA5
DB_ENV_MARIADB_MAJOR=10.2
DB_ENV_MARIADB_VERSION=10.2.11+maria~jessie
NGINX_VERSION=1.13.7-1~stretch
NJS_VERSION=1.13.7.0.1.15-1~stretch
HOME=/root
[root@docker ~]#

其中DB_开头的环境变量是提供web容器连接db容器使用的,前缀采用大写的连接别名。

除了环境变量之外,Docker还添加host信息到父容器的/etc/hosts文件。

[root@docker ~]# docker run -it --rm --link db:db nginx:latest /bin/bash
root@16b8e6fde27f:/# cat /etc/hosts
172.17.0.2  db b239b124946c
172.17.0.5  16b8e6fde27f
root@16b8e6fde27f:/#

这里有两个hosts信息,第一个是db容器的IP和容器名+容器ID,第二个是web自己的IP和容器ID,web容器中hosts文件采用容器的ID作为主机名。

互联的容器之间是可以ping通的。

16.run 多条命令

在run后面加了一个sh -c命令,后面直接加多条语句即可 例如:

docker run centos sh -c "cd /root && ./hello"

docker的常用命令汇总相关推荐

  1. Docker常用命令汇总

    Docker常用命令汇总 帮助命令 docker version docker info docker --help 镜像命令 docker images 列出本地主机上的镜像,各个选项说明如下: R ...

  2. 〖Docker指南②〗Docker常用命令汇总

    Docker常用命令汇总 1 帮助命令 2 镜像命令 2.1 列出镜像 2.2 查找镜像 2.3 下载镜像 2.4 删除镜像 3 容器命令 3.1 创建新容器并运行 3.2 列出容器 3.3 退出容器 ...

  3. docker运行yyets_docker常用命令汇总

    docker常用命令汇总,容器,镜像,内核,版本,端口 docker常用命令汇总 易采站长站,站长之家为您整理了docker常用命令汇总的相关内容. docker安装 1.要求:linux内核在3.1 ...

  4. Docker客户端常用命令整理

    之前在 https://blog.csdn.net/fengbingchun/article/details/109584460 中介绍过在Windows10家庭版和Ubuntu16.04上安装Doc ...

  5. Docker初学3:Docker的常用命令

    Docker的常用命令 帮助命令 帮助命令可以在我们遇到不懂的命令时帮助我们去了解它们怎么使用. docker version # 显示 Docker 版本信息. docker info # 显示 D ...

  6. linux常用命令汇总

    linux常用命令汇总,以便需要时快速查询 中文释义 相应命令 备注 在文件中查找 grep error catalina.out 在catalina.out文件中查找error信息 重启nginx ...

  7. python命令大全下载-Python pip 常用命令汇总

    使用了这么就pip命令,但是一直是简单使用,很多命令都是用了查,查了用,今天把常用的命令汇总一下,方便使用. 命令: pip 由上图可以看到 pip 支持一下命令 Commands: install ...

  8. python常用命令大全-Python pip 常用命令汇总

    使用了这么就pip命令,但是一直是简单使用,很多命令都是用了查,查了用,今天把常用的命令汇总一下,方便使用. 命令: pip 由上图可以看到 pip 支持一下命令 Commands: install ...

  9. 史上最全的Linux常用命令汇总①收藏这一篇就够了!(超全,超详细)

    史上最全的Linux常用命令汇总①(超全面!超详细!)收藏这一篇就够了! Linux命令基础 Shell Linux命令分类 Linux命令行的格式 编辑Linux命令行的辅助操作 获取命令帮助的方法 ...

最新文章

  1. 浙江大学软件学院2020年保研上机模拟练习 7-3 Partial School Ranking
  2. Python匿名函数:lamdba()函数
  3. 迁移学习之ResNet50和ResNet101(图像识别)
  4. 7 centos 设置jvmgc_centos7配置java环境变量
  5. Flash存储控制器组成!(flash)
  6. 通讯故障_掌握PLC必备知识,人机界面和 PLC 出现通讯故障如何分析解决
  7. Hibernate的核心API
  8. 删除oracle表里的重复记录
  9. 小程序发布提审被驳回,提示当前提审小程序代码包中地理位置相关接口wx.getLocation暂未开通
  10. 纸牌小五张游戏的开发
  11. 云计算基础-云计算基础介绍整理
  12. 将指定的计数添加到该信号量中会导致其超过最大计数
  13. 【线性代数】线性相关与线性无关的定义与性质
  14. vue中v-for和v-if不能一起使用
  15. UE4实现生化危机7影子谜题
  16. Cloudera Manager 5.14.X 安装部署(上)
  17. Cucumber中涉及到的类型转换
  18. 2014/10/4 十大经典迷你美剧推荐
  19. 技术导航网网站源码 带后台
  20. 英语单词常用词根(一)

热门文章

  1. altium Designer丝印显示汉字,更换字体,数码管风格,镂空效果
  2. Java 内存模型与线程
  3. 设计模式学习(二): 观察者模式 (C#)
  4. 一切皆文件的编程思想
  5. 【BZOJ】2333: [SCOI2011]棘手的操作
  6. Http协议处理器——Http11Processor
  7. 算法课题(一) 贪心算法
  8. 简单实现ibatis的物理分页
  9. Web 压力测试工具 --Apache AB
  10. 【转载】Hadoop 2.7.3 和Hbase 1.2.4安装教程