Docker

Docker

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

Docker的应用场景

  • Web 应用的自动化打包和发布。
  • 自动化测试和持续集成、发布。
  • 在服务型环境中部署和调整数据库或其他的后台应用。
  • 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。

Docker 的优点

Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,您可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。

1、快速,一致地交付您的应用程序

Docker 允许开发人员使用您提供的应用程序或服务的本地容器在标准化环境中工作,从而简化了开发的生命周期。

容器非常适合持续集成和持续交付(CI / CD)工作流程,请考虑以下示例方案:

  • 您的开发人员在本地编写代码,并使用 Docker 容器与同事共享他们的工作。
  • 他们使用 Docker 将其应用程序推送到测试环境中,并执行自动或手动测试。
  • 当开发人员发现错误时,他们可以在开发环境中对其进行修复,然后将其重新部署到测试环境中,以进行测试和验证。
  • 测试完成后,将修补程序推送给生产环境,就像将更新的镜像推送到生产环境一样简单。

2、响应式部署和扩展

Docker 是基于容器的平台,允许高度可移植的工作负载。Docker 容器可以在开发人员的本机上,数据中心的物理或虚拟机上,云服务上或混合环境中运行。

Docker 的可移植性和轻量级的特性,还可以使您轻松地完成动态管理的工作负担,并根据业务需求指示,实时扩展或拆除应用程序和服务。

3、在同一硬件上运行更多工作负载

Docker 轻巧快速。它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的替代方案,因此您可以利用更多的计算能力来实现业务目标。Docker 非常适合于高密度环境以及中小型部署,而您可以用更少的资源做更多的事情。

安装Docker

#1、卸载旧的版本
yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engin
#2、需要的安装包
yum install -y yum-utils
#3、设置镜像的仓库
yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#更新yum软件包索引
yum makecache fast
#4、安装Docker相关的内容
yum install docker-ce docker-ce-cli containerd.io
#5、启动Docker
systemctl start docker
#6、使用docker version查看版本
#7、hello-world
docker run hello-world
#8、查看镜像
docker images

了解:卸载docker

#1、卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
#2、删除资源
rm -rf /var/lib/docker   
#docker的默认工作路径

配置镜像加速器

针对Docker客户端版本大于 1.10.0 的用户

您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器

mkdir -p /etc/docker

tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://n3jzbppv.mirror.aliyuncs.com"]
}
EOF

systemctl daemon-reload

systemctl restart docker

Docker的常用命令

帮助命令

docker version         #显示docker的版本信息
docker info            #显示docker的系统信息,包括镜像和容器的数量
docker 命令 --help      #帮助命令

镜像命令

docker images   来列出本地主机上的镜像

#各个选项说明:
REPOSITORY:表示镜像的仓库源
TAG:镜像的标签
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小

#可选项
-a     #all,列出所有镜像
-q     #quiet,只显示镜像的id
docker search   #搜索镜像

#可选项,过滤
docker search mysql --filter=STARS=3000

docker pull 镜像名    #下载镜像
#docker pull mysql:5.7   指定版本下载

docker rmi    #删除镜像
#docker rmi -f 容器id     #删除指定的容器
#docker rmi -f $(docker images -aq)     #删除全部的容器

容器命令

下载一个centos镜像来测试学习

docker pull centos

新建容器并启动

docker run [可选参数] image
#参数说明
--name="Name"    容器名字
-d               后台方式运行
-it              使用交互方式运行,进入容器查看内容
-p               指定容器的端口
	-p 主机端口:容器端口 (常用)
-P               随机指定端口

#测试,启动并进入容器
[root@node ~]# docker run -it centos /bin/bash
[root@ad836a946a7f /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@ad836a946a7f /]# exit
exit

docker ps   #列出当前正在运行的容器
docker ps -a   #列出当前正在运行的容器+带出历史运行过的容器
docker ps -q   #只显示容器的编号

退出容器

exit   #直接容器停止并退出
Ctrl + P + Q   #容器不停止退出

删除容器

docker rm 容器id     #删除指定的容器
docker rm -f $(docker ps -aq)     #删除所有的容器
docker ps -a -q|xargs docker rm     #删除所有的容器

启动和停止容器的操作

docker start 容器id   
docker restart 容器id   
docker stop 容器id   
docker kill 容器id   

常用其他命令

#后台启动容器
docker run -d 镜像名

#显示日志
docker logs -tf --tail 10 c8f13225a398

查看容器中进程信息

docker top eb3a5fec5183
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                28822               28800               0                   17:51               pts/0               00:00:00            /bin/bash

查看镜像的元数据

docker inspect eb3a5fec5183

进入当前正在运行的容器

#方式一
docker exec -it 容器id /bin/bash
#方式二
docker attach 容器id
正在执行当前的代码...
#区别
docker exec      #进入容器后开启一个新的终端,可以在里面操作(常用)
docker attach    #进入容器正在执行的终端,不会启动新的进程

从容器内拷贝文件到主机上

docker cp cd8404069045:/home/test.java /home
#docker cp 容器id:容器内路径 目的主机路径

[root@iZwz984mbcsaw10myjq9s4Z ~]# cd /home
[root@iZwz984mbcsaw10myjq9s4Z home]# touch yrz.java
[root@iZwz984mbcsaw10myjq9s4Z home]# ls
yrz.java
[root@iZwz984mbcsaw10myjq9s4Z home]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS         PORTS     NAMES
cd8404069045   centos    "/bin/bash"   3 minutes ago   Up 3 minutes             stoic_solomon

[root@iZwz984mbcsaw10myjq9s4Z home]# docker attach cd8404069045
[root@cd8404069045 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@cd8404069045 /]# cd /home
[root@cd8404069045 home]# touch test.java
[root@cd8404069045 home]# ls
test.java
[root@cd8404069045 home]# exit
exit
[root@iZwz984mbcsaw10myjq9s4Z home]# docker ps -a
CONTAINER ID   IMAGE         COMMAND       CREATED          STATUS                       PORTS     NAMES
cd8404069045   centos        "/bin/bash"   5 minutes ago    Exited (0) 13 seconds ago              stoic_solomon
f870a6cc18be   centos        "/bin/bash"   6 minutes ago    Exited (127) 5 minutes ago             busy_jang
a9a9233d68c0   centos        "/bin/bash"   10 minutes ago   Exited (0) 10 minutes ago              zen_blackburn
ed4094a5a27d   hello-world   "/hello"      14 minutes ago   Exited (0) 14 minutes ago              lucid_elion
dff9cbb36340   hello-world   "/hello"      14 minutes ago   Exited (0) 14 minutes ago              gracious_hodgkin
[root@iZwz984mbcsaw10myjq9s4Z home]# docker cp cd8404069045:/home/test.java /home
[root@iZwz984mbcsaw10myjq9s4Z home]# ls
test.java  yrz.java

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KTzZn9OM-1625481362771)(Day26.assets/7dae6c9a-a506-3bde-8ef6-893793134eb7.png)]

练习

Docker安装Nginx

[root@iZwz984mbcsaw10myjq9s4Z /]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
69692152171a: Already exists 
30afc0b18f67: Pull complete 
596b1d696923: Pull complete 
febe5bd23e98: Pull complete 
8283eee92e2f: Pull complete 
351ad75a6cfa: Pull complete 
Digest: sha256:6d75c99af15565a301e48297fa2d121e15d80ad526f8369c526324f0f7ccb750
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
[root@iZwz984mbcsaw10myjq9s4Z /]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
nginx         latest    d1a364dc548d   3 weeks ago    133MB
mysql         5.7       2c9028880e58   4 weeks ago    447MB
hello-world   latest    d1165f221234   3 months ago   13.3kB
centos        latest    300e315adb2f   6 months ago   209MB
[root@iZwz984mbcsaw10myjq9s4Z /]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
# -d 后台运行
# -name 给容器命名
# -p 宿主机端口:容器内部端口
[root@iZwz984mbcsaw10myjq9s4Z /]# docker run -d --name nginx01 -p 3344:80 nginx
1b3942d19e28e5679e63d3edb634631f626ed26b421a0d0ca377eb742c404e12
[root@iZwz984mbcsaw10myjq9s4Z /]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                  NAMES
1b3942d19e28   nginx     "/docker-entrypoint.…"   5 seconds ago   Up 4 seconds   0.0.0.0:3344->80/tcp   nginx01
[root@iZwz984mbcsaw10myjq9s4Z /]# curl localhost:3344
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

Docker安装Tomcat

#用完即删,适合用于测试,不建议
docker run -it --rm tomcat:9.0

#下载安装
[root@iZwz984mbcsaw10myjq9s4Z /]# docker pull tomcat
Using default tag: latest
latest: Pulling from library/tomcat
Digest: sha256:71703331e3e7f8581f2a8206a612dbeedfbc7bb8caeee972eadca1cc4a72e6b1
Status: Downloaded newer image for tomcat:latest
docker.io/library/tomcat:latest
[root@iZwz984mbcsaw10myjq9s4Z /]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
nginx         latest    d1a364dc548d   3 weeks ago    133MB
tomcat        9.0       c43a65faae57   4 weeks ago    667MB
tomcat        latest    c43a65faae57   4 weeks ago    667MB
mysql         5.7       2c9028880e58   4 weeks ago    447MB
hello-world   latest    d1165f221234   3 months ago   13.3kB
centos        latest    300e315adb2f   6 months ago   209MB
# -p 宿主机端口:容器内部端口
[root@iZwz984mbcsaw10myjq9s4Z /]# docker run -d -p 3355:8080 --name tomcat01 tomcat
fe3a60cb56b27477da5261984f7f16d782c3cf440d879d41ebb09a1344724780

#测试访问没有问题
#进入容器
docker exec -it tomcat01 /bin/bash

Docker安装elasticsearch

#安装及启动 elasticsearch
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.13.2

# docker stats
CONTAINER ID   NAME            CPU %     MEM USAGE / LIMIT     MEM %     NET I/O           BLOCK I/O         PIDS
76e186bb2010   elasticsearch   0.02%     1.156GiB / 1.795GiB   64.38%    0B / 0B           186MB / 1.25MB    47
fe3a60cb56b2   tomcat01        0.11%     116.9MiB / 1.795GiB   6.36%     32.7kB / 417kB    20.9MB / 0B       29
1b3942d19e28   nginx01         0.00%     1.555MiB / 1.795GiB   0.08%     4.78kB / 6.27kB   5.49MB / 8.19kB   2

#测试一下es是成功了
[root@iZwz984mbcsaw10myjq9s4Z home]# curl localhost:9200
{
  "name" : "76e186bb2010",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "6ezcpvEuTPGLj6nCYI7Zgw",
  "version" : {
    "number" : "7.13.2",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "4d960a0733be83dd2543ca018aa4ddc42e956800",
    "build_date" : "2021-06-10T21:01:55.251515791Z",
    "build_snapshot" : false,
    "lucene_version" : "8.8.2",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

#增加内存的限制,修改配置文件 -e 环境配置修改
docker run -d --name elasticsearch02 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xms512m" elasticsearch:7.13.2

可视化

  • portainer
#安装
docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer

http://47.106.193.187:8088/

commit镜像

方式一

root@fe3a60cb56b2:/usr/local/tomcat# cp-r webapps.dist/* webapps
root@fe3a60cb56b2:/usr/local/tomcat# exit
[root@iZwz984mbcsaw10myjq9s4Z ~]# docker commit -a="yrz" -m="add webapps" fe3a60cb56b2 tomcat02
sha256:8df88761d84ad6fe68f5e4a418e3f5535ed0b360a19a5efac1dcef23413b43cc
[root@iZwz984mbcsaw10myjq9s4Z ~]# docker images
REPOSITORY            TAG       IMAGE ID       CREATED         SIZE
tomcat02              latest    8df88761d84a   4 minutes ago   672MB
elasticsearch         7.13.2    11a830014f7c   7 days ago      1.02GB
redis                 latest    fad0ee7e917a   2 weeks ago     105MB
nginx                 latest    d1a364dc548d   3 weeks ago     133MB
tomcat                latest    c43a65faae57   5 weeks ago     667MB
mysql                 5.7       2c9028880e58   5 weeks ago     447MB
portainer/portainer   latest    580c0e4e98b0   3 months ago    79.1MB
hello-world           latest    d1165f221234   3 months ago    13.3kB
centos                latest    300e315adb2f   6 months ago    209MB

容器数据卷

Docker中的数据可以存储在类似于虚拟机磁盘的介质中,在Docker中称为数据卷(Data Volume)。数据卷可以用来存储Docker应用的数据,也可以用来在Docker容器间进行数据共享。数据卷呈现给Docker容器的形式就是一个目录,支持多个容器间共享,修改也不会影响镜像。使用Docker的数据卷,类似在系统中使用 mount 挂载一个文件系统。操作Docker数据卷,需要理解以下几点:

**1)**一个数据卷是一个特别指定的目录,该目录利用容器的UFS文件系统可以为容器提供一些稳定的特性或者数据共享。数据卷可以在多个容器之间共享。

**2)**创建数据卷,只要在docker run命令后面跟上-v参数即可创建一个数据卷,当然也可以跟多个-v参数来创建多个数据卷,当创建好带有数据卷的容器后,就可以在其他容器中通过–volumes-froms参数来挂载该数据卷了,而不管该容器是否运行。也可以在Dockerfile中通过VOLUME指令来增加一个或者多个数据卷。

**3)**如果有一些数据想在多个容器间共享,或者想在一些临时性的容器中使用该数据,那么最好的方案就是你创建一个数据卷容器,然后从该临时性的容器中挂载该数据卷容器的数据。这样,即使删除了刚开始的第一个数据卷容器或者中间层的数据卷容器,只要有其他容器使用数据卷,数据卷都不会被删除的。

**4)**不能使用docker export、save、cp等命令来备份数据卷的内容,因为数据卷是存在于镜像之外的。备份方法: 创建一个新容器,挂载数据卷容器,同时挂载一个本地目录,然后把远程数据卷容器的数据卷通过备份命令备份到映射的本地目录里面。如下:
# docker run --rm --volumes-from DATA -v $(pwd):/backup busybox tar cvf /backup/backup.tar /data

**5)**可以把一个本地主机的目录当做数据卷挂载在容器上,同样是在docker run后面跟-v参数,不过-v后面跟的不再是单独的目录了,它是[host-dir]:[container-dir]:[rw|ro]这样格式的,其中host-dir是一个绝对路径的地址,如果host-dir不存在,则docker会创建一个新的数据卷,如果host-dir存在,但是指向的是一个不存在的目录,则docker也会创建该目录,然后使用该目录做数据源。

Docker Volume数据卷可以实现:

-> 绕过“拷贝写”系统,以达到本地磁盘IO的性能,(比如运行一个容器,在容器中对数据卷修改内容,会直接改变宿主机上的数据卷中的内容,所以是本地磁盘IO的性能,而不是先在容器中写一份,最后还要将容器中的修改的内容拷贝出来进行同步。)
-> 绕过“拷贝写”系统,有些文件不需要在docker commit打包进镜像文件。
-> 数据卷可以在容器间共享和重用数据
-> 数据卷可以在宿主和容器间共享数据
-> 数据卷数据改变是直接修改的
-> 数据卷是持续性的,直到没有容器使用它们。即便是初始的数据卷容器或中间层的数据卷容器删除了,只要还有其他的容器使用数据卷,那么里面的数据都不会丢失。

使用数据卷

方式一:直接使用docker run命令来挂载 -v

docker run -it -v 主机目录:容器内目录

# docker run -it -v /home/ceshi:/home centos /bin/bash

# 启动起来之后可以通过 docker inspect 容器id 查看

MySQL的数据持久化问题

# docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

[root@iZwz984mbcsaw10myjq9s4Z home]# docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.7
ef8ce49645ed0f5f9b8afd1bd9b86db961316230e7f0db49f169f0a986efd50a

具名和匿名挂载

# 匿名挂载
-v 容器内路径
docker run -d -P --name nginx01 -v /etc/nginx nginx

# 查看所有volume的情况
# docker volume ls

# 具名挂载
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx
# 通过 -v 卷名:容器内路径
# 查看卷
docker volume inspect juming-nginx

Dockerfile

Dockerfile就是用来构建docker镜像的构建文件,命令脚本

(通过这个脚本可以生成镜像,镜像是一层一层的,脚本一个一个的命令,每个命令都是一层)

方式二

(这种情况常用,假设构建镜像时候没有挂载卷,要手动镜像挂载 -v 卷名:容器内路径)

# dockerfile01
FROM centos
VOLUME ["volume01","volume02"] # 匿名挂载
CMD echo ".....end....."
CMD /bin/bash

[root@Y_rz docker-test-volume]# docker build -f /home/docker-test-volume/dockerfile01 -t yrz/centos:1.0 .
Sending build context to Docker daemon  2.048kB
Step 1/4 : FROM centos
 ---> 300e315adb2f
Step 2/4 : VOLUME ["volume01","volume02"]
 ---> Running in ce9959464f17
Removing intermediate container ce9959464f17
 ---> 7b69c82dbd9e
Step 3/4 : CMD echo ".....end....."
 ---> Running in f24b14503f5a
Removing intermediate container f24b14503f5a
 ---> 739d5f64ed99
Step 4/4 : CMD /bin/bash
 ---> Running in fe6b6404debc
Removing intermediate container fe6b6404debc
 ---> 8071952cd231
Successfully built 8071952cd231
Successfully tagged yrz/centos:1.0

[root@Y_rz docker-test-volume]# docker images
REPOSITORY            TAG       IMAGE ID       CREATED          SIZE
yrz/centos            1.0       8071952cd231   54 seconds ago   209MB

# docker run -it 8071952cd231 /bin/bash

容器间的共享

# --volumes-from
docker run -it --name docker01 yrz/centos:1.0
docker run -it --name docker02 --volumes-from docker01 yrz/centos:1.0

# 实现两个容器的数据同步
docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
docker run -d -p 3310:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 --volumes-from mysql01 mysql:5.7

Dockerfile

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0OypxkOR-1625481362774)(Day26.assets/%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_20210622112453.png)]

创建一个自己的centos

# mydockerfile
FROM centos
MAINTAINER Y_rz<1500200086@qq.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH

RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80

CMD echo $MYPATH
CMD echo ".....end....."
CMD /bin/bash

# 通过build命令来构建
docker build -f mydockerfile -t mycentos:1.0 .
# 运行
[root@Y_rz dockerfile]# docker run -it mycentos:1.0

# docker history 镜像id

Dockerfile制作tomcat镜像

[root@Y_rz tomcat]# vim Dockerfile
FROM centos
MAINTAINER Y_rz<1500200086@qq.com>
ADD jdk-8u181-linux-x64.tar.gz /usr/local
ADD apache-tomcat-8.5.39.tar.gz /usr/local

ENV MYPATH /usr/local
WORKDIR $MYPATH

RUN yum -y install vim
RUN yum -y install net-tools

ENV JAVA_HOME /usr/local/jdk1.8.0_181
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.39
ENV CATALINA_BASE /usr/local/apache-tomcat-8.5.39
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

EXPOSE 8080

CMD /usr/local/apache-tomcat-8.5.39/bin/startup.sh && tail -F /url/local/apache-tomcat-8.5.39/bin/logs/catalina.out

[root@Y_rz tomcat]# docker build -t diytomcat .
[root@Y_rz tomcat]# docker run -d -p 9090:8080 --name diytomcat -v /home/yrz/tomcat/test:/usr/local/apache-tomcat-8.5.39/webapps/test -v /home/yrz/tomcat/tomcatlogs/:/usr/local/apache-tomcat-8.5.39/logs diytomcat
# 启动测试
[root@Y_rz tomcat]# docker exec -it 36d82810b32ca /bin/bash

发布镜像到dockerhub

[root@Y_rz tomcat]# docker login -u dockeryrz
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

Docker0网络

容器互联:

[root@Y_rz /]# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
bc4f21da6f1eede9c424874eaf9abe651769f3b14ed5725d597e8fe55155c721
[root@Y_rz /]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
38158868bc41   bridge    bridge    local
e2c09f6cd726   host      host      local
bc4f21da6f1e   mynet     bridge    local
7da34a9bf9a9   none      null      local
[root@Y_rz /]# docker network inspect mynet
[
    {
        "Name": "mynet",
        "Id": "bc4f21da6f1eede9c424874eaf9abe651769f3b14ed5725d597e8fe55155c721",
        "Created": "2021-07-05T16:29:43.075507965+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "192.168.0.0/16",
                    "Gateway": "192.168.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {},
        "Labels": {}
    }
]

[root@Y_rz /]# docker run -d -P --name tomcat-net-01 --net mynet tomcat
31618ecde1a0507dd5863161cc408d9fca31c65b0e8c329b8285714063a9bdb2
[root@Y_rz /]# docker run -d -P --name tomcat-net-02 --net mynet tomcat
18fa9b2a40519e6010b843fdaf46500cd73d38fd4fb0f9fcee945fe6b90f5213
[root@Y_rz /]# docker network inspect mynet
[
    {
        "Name": "mynet",
        "Id": "bc4f21da6f1eede9c424874eaf9abe651769f3b14ed5725d597e8fe55155c721",
        "Created": "2021-07-05T16:29:43.075507965+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "192.168.0.0/16",
                    "Gateway": "192.168.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "18fa9b2a40519e6010b843fdaf46500cd73d38fd4fb0f9fcee945fe6b90f5213": {
                "Name": "tomcat-net-02",
                "EndpointID": "f9d8793e805d4ba148a4123e388de49a30926fe262034a069ff9c9728d7e5e8a",
                "MacAddress": "02:42:c0:a8:00:03",
                "IPv4Address": "192.168.0.3/16",
                "IPv6Address": ""
            },
            "31618ecde1a0507dd5863161cc408d9fca31c65b0e8c329b8285714063a9bdb2": {
                "Name": "tomcat-net-01",
                "EndpointID": "92a701f0077c5c3ec951fd3d7768b2b085a905254b64e8c8b0f9a81dfb7b2438",
                "MacAddress": "02:42:c0:a8:00:02",
                "IPv4Address": "192.168.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]
[root@Y_rz /]# docker exec -it tomcat-net-01 ping tomcat-net-02
PING tomcat-net-02 (192.168.0.3) 56(84) bytes of data.
64 bytes from tomcat-net-02.mynet (192.168.0.3): icmp_seq=1 ttl=64 time=0.082 ms
64 bytes from tomcat-net-02.mynet (192.168.0.3): icmp_seq=2 ttl=64 time=0.082 ms
64 bytes from tomcat-net-02.mynet (192.168.0.3): icmp_seq=3 ttl=64 time=0.072 ms
64 bytes from tomcat-net-02.mynet (192.168.0.3): icmp_seq=4 ttl=64 time=0.073 ms

网络连通

[root@Y_rz ~]# docker network connect mynet tomcat01
[root@Y_rz ~]# docker network inspect mynet
[root@Y_rz ~]# docker exec -it tomcat01 ping tomcat-net-01
PING tomcat-net-01 (192.168.0.2) 56(84) bytes of data.
64 bytes from tomcat-net-01.mynet (192.168.0.2): icmp_seq=1 ttl=64 time=0.120 ms
64 bytes from tomcat-net-01.mynet (192.168.0.2): icmp_seq=2 ttl=64 time=0.078 ms
64 bytes from tomcat-net-01.mynet (192.168.0.2): icmp_seq=3 ttl=64 time=0.084 ms
64 bytes from tomcat-net-01.mynet (192.168.0.2): icmp_seq=4 ttl=64 time=0.074 ms
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

'Boom'

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值