Docker

Docker

安装

ubuntu 22.04

  1. 卸载旧版本(如果有)
sudo apt remove docker docker-engine docker.io containerd runc -y
  1. 更新软件包索引
sudo apt update
  1. 安装必要的依赖
sudo apt install -y ca-certificates curl gnupg
  1. 添加 Docker 官方 GPG 密钥
sudo install -m 0755 -d /etc/apt/keyrings

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo tee /etc/apt/keyrings/docker.asc > /dev/null

sudo chmod a+r /etc/apt/keyrings/docker.asc
  1. 添加 Docker 官方软件源
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  1. 更新软件包索引
sudo apt update
  1. 安装 Docker
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  1. 启动并设置开机自启
sudo systemctl enable --now docker
  1. 测试 Docker
sudo docker run hello-world

centos 7

  1. 使用国内镜像源
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo yum clean all
sudo yum makecache fast
  1. 安装 Docker
sudo yum install -y docker-ce docker-ce-cli containerd.io
  1. 测试 Docker
sudo docker --version
sudo docker run hello-world

配置镜像源

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://docker.1ms.run",
    "https://docker.mybacc.com"
  ]
}
EOF

sudo systemctl daemon-reload
sudo systemctl restart docker

常用命令

帮助命令

docker version		#显示版本
docker info 		#显示系统信息
docker 命令 --help	#命令帮助


镜像命令

docker images #查看镜像
dong@ubuntu-dong:~$ sudo docker images
仓库			标签		  容器id			创建时间		大小
REPOSITORY    TAG       IMAGE ID       CREATED       SIZE
hello-world   latest    74cc54e27dc4   8 weeks ago   10.1kB


docker search 软件 #搜索镜像

docker pull 软件:版本 #拉取镜像

docker rmi -f 容器id # 删除镜像

容器命令

docker run [可选参数] image 	#运行容器
--name="Name"	容器名字,用来区分相同服务
-d				后台方式运行
-it 			使用交互模式运行
-p				指定容器端口
	-P ip:主机端口:容器端口
	-P 主机端口:容器端口
	-P 容器端口
-P				随机指定端口

exit 						#退出容器
CTRL+P+Q 					#不停止退出

docker ps					#查看正在运行的容器
-a 		#正在运行+历史运行
-q 		#只显示编号

docker start 容器id		#启动容器
docker restart 容器id		#重启容器
docker stop 容器id		#停止当前正在运行的容器
docker kill 容器id		#强制停止容器

例子

#查看容器内部
dong@ubuntu-dong:~$ sudo docker run -it centos /bin/bash
[root@343604dddb28 /]# 
[root@343604dddb28 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

#从容器返回主机
[root@343604dddb28 /]# exit
exit
dong@ubuntu-dong:~$ 

常用其他命令

docker logs			 	  #查看日志
docker top 容器id			 	#查看容器内部进程信息
docker inspect 容器id		 		#查看容器信息
docker exec - it 容器id 容器路径	        #进入容器1(开启新的终端)
docker attach  容器id 			#进入容器2(直接进入)
sudo docker stop $(sudo docker ps -q)     #停止所有容器
docker rm -f $(docker ps -aq)         #删除所有容器

容器和主机文件复制

#从容器内复制到主机

dong@ubuntu-dong:~$ sudo docker images
REPOSITORY                     TAG       IMAGE ID       CREATED        SIZE
docker.1ms.run/library/mysql   latest    fa262c3a6564   2 months ago   797MB
hello-world                    latest    74cc54e27dc4   2 months ago   10.1kB
centos                         latest    5d0da3dc9764   3 years ago    231MB
dong@ubuntu-dong:~$ sudo docker run -it centos /bin/bash
[root@8d5b634707bb /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@8d5b634707bb /]# cd home
[root@8d5b634707bb home]# ls
[root@8d5b634707bb home]# touch test.java
[root@8d5b634707bb home]# ls
test.java
[root@8d5b634707bb home]# exit
exit
dong@ubuntu-dong:~$ ls
公共的  模板  视频  图片  文档  下载  音乐  桌面  snap
dong@ubuntu-dong:~$ cd 公共的
dong@ubuntu-dong:~/公共的$ ls
dong@ubuntu-dong:~/公共的$ sudo docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
dong@ubuntu-dong:~/公共的$ sudo docker ps -a
CONTAINER ID   IMAGE         COMMAND                  CREATED         STATUS                     PORTS     NAMES
8d5b634707bb   centos        "/bin/bash"              3 minutes ago   Exited (0) 2 minutes ago             focused_galileo
343604dddb28   centos        "/bin/bash"              25 hours ago    Exited (0) 24 hours ago              cool_mahavira
2be4371dad78   centos        "-it centos /bin/bash"   25 hours ago    Created                              strange_ganguly
86afaf9e8dbc   hello-world   "/hello"                 5 days ago      Exited (0) 5 days ago                busy_williams
dong@ubuntu-dong:~/公共的$ sudo docker cp 8d5b634707bb:/home/test.java /home
Successfully copied 1.54kB to /home
dong@ubuntu-dong:~/公共的$ cd /
dong@ubuntu-dong:/$ ls
bin   cdrom  etc   lib    lib64   lost+found  mnt  proc  run   snap  swapfile  tmp  var
boot  dev    home  lib32  libx32  media       opt  root  sbin  srv   sys       usr
dong@ubuntu-dong:/$ cd home
dong@ubuntu-dong:/home$ ls
dong  test.java
dong@ubuntu-dong:/home$ 

commit镜像

docker commit

docker commit -m="提交描述信息" -a="作者" 容器id 目标镜像名

容器数据卷

将容器内的数据持久化到主机上
将容器内的目录挂载到Linux上

使用数据卷

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

img
img
img

实战mysql

-d 后台运行
-p 映射端口
--name 设置容器名称
-v 挂载数据卷
-e 设置环境变量(设置密码)
docker run -d -p 3310:3306 --name mysql -v /home/mysql/conf/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql

img
img
通过Navicat测试连接,可以连接到
img
并且数据卷也正确挂载

具名挂载和匿名挂载

查看挂载卷
docker volume ls
docker volume inspect 卷名

#匿名挂载
- v 容器内目录
[root@localhost home]# docker run -d -P --name testnginx -v /etc/nginx nginx
97cfd5973d4e55d8f1b8eb5daefc712e920954f595f6e5a5d612d8171c8e0723
[root@localhost home]# docker volume ls
DRIVER    VOLUME NAME
local     2771022a1f863adcfd50f822b3ede34eb6a6d15587b9d634f399b31d7de1c0ba


#具名挂载
-v 卷名:容器目录
[root@localhost home]# docker run -d --name nginx01 -v juming:/etc/nginx nginx
b0fe4c0ff7ce6b3e92f9fbfe09b2dfa2fb04d07f5641eb85e0bdeeffbe1e383c
[root@localhost home]# docker volume ls
DRIVER    VOLUME NAME
local     juming
[root@localhost home]# docker volume inspect juming
[
    {
        "CreatedAt": "2025-03-28T16:26:22+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/juming/_data",
        "Name": "juming",
        "Options": null,
        "Scope": "local"
    }
]

#指定路径挂载
-v 宿主机目录:容器目录

数据卷容器

多个容器共享一个数据卷

img

docekr run --volume-from 数据卷所属容器名 镜像名

DockerFile

Dockerfile 指令 说明
FROM 指定基础镜像,用于后续的指令构建。
MAINTAINER 指定 Dockerfile 的作者/维护者。(已弃用,推荐使用 LABEL 指令)
LABEL 添加镜像的元数据,使用键值对的形式。
RUN 在构建过程中在镜像中执行命令。
CMD 指定容器创建时的默认命令。(可以被覆盖)
ENTRYPOINT 设置容器创建时的主要命令。(不可被覆盖)
EXPOSE 声明容器运行时监听的特定网络端口。
ENV 在容器内部设置环境变量。
ADD 将文件、目录或远程 URL 复制到镜像中。
COPY 将文件或目录复制到镜像中。
VOLUME 为容器创建挂载点或声明卷。
WORKDIR 设置后续指令的工作目录。
USER 指定后续指令的用户上下文。
ARG 定义在构建过程中传递给构建器的变量,可使用 docker build 命令设置。
ONBUILD 当该镜像被用作另一个构建过程的基础时,添加触发器。
STOPSIGNAL 设置发送给容器以退出的系统调用信号。
HEALTHCHECK 定义周期性检查容器健康状态的命令。
SHELL 覆盖 Docker 中默认的 shell,用于 RUNCMDENTRYPOINT 指令。

构建镜像

mycnetos

img
这个容器只有基础的系统,一些基本的工具没有
现在创建一个mycentos7的镜像

1.编写Dockerfile

FROM centos:7
MAINTAINER dong<dongjiancheng2003@163.com>

ENV MYPATH /usr/local
WORKDIR $MYPATH

RUN sed -i 's|^mirrorlist=|#mirrorlist=|g; s|^#baseurl=http://mirror.centos.org|baseurl=https://mirrors.aliyun.com|g' /etc/yum.repos.d/CentOS-Base.repo \
    && yum clean all && yum makecache

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

EXPOSE 80

CMD echo $MYPATH
CMD echo "构建成功"
CMD /bin/bash

2.构建镜像

docker build -f mydockerfile-centos -t mycentos:0.1 .

#输出
[root@localhost dockerfile]# docker build -f mydockerfile-centos -t mycentos:0.1 .
[+] Building 62.7s (10/10) FINISHED                                                                                  docker:default
 => [internal] load build definition from mydockerfile-centos                                                                  0.0s
 => => transferring dockerfile: 540B                                                                                           0.0s
 => [internal] load metadata for docker.io/library/centos:7                                                                    0.0s
 => [internal] load .dockerignore                                                                                              0.0s
 => => transferring context: 2B                                                                                                0.0s
 => [1/6] FROM docker.io/library/centos:7                                                                                      0.0s
 => CACHED [2/6] WORKDIR /usr/local                                                                                            0.0s
 => [3/6] RUN sed -i 's|^mirrorlist=|#mirrorlist=|g; s|^#baseurl=http://mirror.centos.org|baseurl=https://mirrors.aliyun.com  38.4s
 => [4/6] RUN yum install -y vim                                                                                              14.8s 
 => [5/6] RUN yum install -y net-tools                                                                                         2.8s 
 => [6/6] RUN yum install -y wget                                                                                              2.8s 
 => exporting to image                                                                                                         3.8s 
 => => exporting layers                                                                                                        3.7s 
 => => writing image sha256:582d769b483b32012c3fd8e186571645e885f881fc2d5254bb9127bce856de1f                                   0.0s 
 => => naming to docker.io/library/mycentos:0.1

3.使用运行镜像

[root@localhost dockerfile]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
mycentos     0.1       582d769b483b   53 seconds ago   1.46GB
nginx        latest    53a18edff809   7 weeks ago      192MB
mysql        latest    fa262c3a6564   2 months ago     797MB
centos       7         eeb6ee3f44bd   3 years ago      204MB
centos       latest    5d0da3dc9764   3 years ago      231MB
[root@localhost dockerfile]# docker run -it mycentos
Unable to find image 'mycentos:latest' locally
^C
[root@localhost dockerfile]# docker run -it mycentos:0.1
[root@99c896726b7b local]# pwd
/usr/local
[root@99c896726b7b local]# vim

[1]+  Stopped                 vim
[root@99c896726b7b local]# wget
wget: missing URL
Usage: wget [OPTION]... [URL]...

Try `wget --help' for more options.
[root@99c896726b7b local]# 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 8  bytes 656 (656.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

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        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

[root@99c896726b7b local]# 

4.查看镜像历史

docker history 镜像名称

###输出
[root@localhost dockerfile]# docker history mycentos:0.1
IMAGE          CREATED          CREATED BY                                       SIZE      COMMENT
582d769b483b   9 minutes ago    CMD ["/bin/sh" "-c" "/bin/bash"]                 0B        buildkit.dockerfile.v0
<missing>      9 minutes ago    CMD ["/bin/sh" "-c" "echo \"构建成功\""]         0B        buildkit.dockerfile.v0
<missing>      9 minutes ago    CMD ["/bin/sh" "-c" "echo $MYPATH"]              0B        buildkit.dockerfile.v0
<missing>      9 minutes ago    EXPOSE map[80/tcp:{}]                            0B        buildkit.dockerfile.v0
<missing>      9 minutes ago    RUN /bin/sh -c yum install -y wget # buildkit    221MB     buildkit.dockerfile.v0
<missing>      9 minutes ago    RUN /bin/sh -c yum install -y net-tools # bu…   221MB     buildkit.dockerfile.v0
<missing>      9 minutes ago    RUN /bin/sh -c yum install -y vim # buildkit     276MB     buildkit.dockerfile.v0
<missing>      9 minutes ago    RUN /bin/sh -c sed -i 's|^mirrorlist=|#mirro…   532MB     buildkit.dockerfile.v0
<missing>      12 minutes ago   WORKDIR /usr/local                               0B        buildkit.dockerfile.v0
<missing>      12 minutes ago   ENV MYPATH=/usr/local                            0B        buildkit.dockerfile.v0
<missing>      12 minutes ago   MAINTAINER dong<dongjiancheng2003@163.com>       0B        buildkit.dockerfile.v0
<missing>      3 years ago      /bin/sh -c #(nop)  CMD ["/bin/bash"]             0B        
<missing>      3 years ago      /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B        
<missing>      3 years ago      /bin/sh -c #(nop) ADD file:b3ebbe8bd304723d4…   204MB 

mytomcat

1.准备
准备镜像文件,tomcat压缩包,jdk安装包...

2.编写Dockerfile

FROM centos:7
MAINTAINER dong<dongjiancheng2003@163.com>

COPY readme.md /user/local/readme.md

ADD apache-tomcat-9.0.102.tar.gz /user/local/
ADD jdk-8u441-linux-x64.tar.gz /user/local/

RUN sed -i 's|^mirrorlist=|#mirrorlist=|g; s|^#baseurl=http://mirror.centos.org|baseurl=https://mirrors.aliyun.com|g' /etc/yum.repos.d/CentOS-Base.repo \
    && yum clean all && yum makecache

RUN yum install -y vim

ENV MYPATH /user/local
WORKDIR $MYPATH

ENV JAVA_HOME /user/local/jdk1.8.0_441
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /user/local/apache-tomcat-9.0.102
ENV CATALINA_BASH /user/local/apache-tomcat-9.0.102
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

EXPOSE 8080

CMD /user/local/apache-tomcat-9.0.102/bin/startup.sh && tail -F /user/local/apache-tomcat-9.0.102/logs/catalina.out

img

3.构建镜像

docker build -t diytomcat .

[root@localhost xiangmu]# docker build -t diytomcat .
[+] Building 59.1s (12/12) FINISHED                                                                                  docker:default
 => [internal] load build definition from Dockerfile                                                                           0.0s
 => => transferring dockerfile: 944B                                                                                           0.0s
 => [internal] load metadata for docker.io/library/centos:7                                                                    0.0s
 => [internal] load .dockerignore                                                                                              0.0s
 => => transferring context: 2B                                                                                                0.0s
 => CACHED [1/7] FROM docker.io/library/centos:7                                                                               0.0s
 => [internal] load build context                                                                                              0.9s
 => => transferring context: 161.27MB                                                                                          0.9s
 => [2/7] COPY readme.md /user/local/readme.md                                                                                 0.3s
 => [3/7] ADD apache-tomcat-9.0.102.tar.gz /user/local/                                                                        0.3s
 => [4/7] ADD jdk-8u441-linux-x64.tar.gz /user/local/                                                                          5.0s
 => [5/7] RUN sed -i 's|^mirrorlist=|#mirrorlist=|g; s|^#baseurl=http://mirror.centos.org|baseurl=https://mirrors.aliyun.com  37.3s
 => [6/7] RUN yum install -y vim                                                                                              12.8s 
 => [7/7] WORKDIR /user/local                                                                                                  0.0s 
 => exporting to image                                                                                                         2.2s 
 => => exporting layers                                                                                                        2.1s 
 => => writing image sha256:59cc08fda5b4d3c0893f5b148848ff89e4064a3e55714af0210e0453c2a0ccc6                                   0.0s 
 => => naming to docker.io/library/diytomcat    

4.运行容器

docker run -d -p 9090:8080 --name dongtomcat -v /home/dong/docker/tomcat/xiangmu:/user/local/apache-tomcat-9.0.102/webapps/xiangmu -v /home/dong/docker/tomcat/tomcatlogs/:/user/local/apache-tomcat-9.0.102/logs diytomcat

springboot项目

1.准备
jar包,jdk安装包,Dockerfile

2.编写Dockerfile

# 使用官方的 OpenJDK 8 基础镜像
FROM openjdk:8-jdk-slim

# 设置工作目录
WORKDIR /app

# 将构建好的 JAR 文件复制到镜像中
COPY HelloDocker-0.0.1-SNAPSHOT.jar /app/

# 暴露应用的端口(根据你的 Spring Boot 应用配置)
EXPOSE 8081

# 定义容器启动时执行的命令
ENTRYPOINT ["java", "-jar", "HelloDocker-0.0.1-SNAPSHOT.jar"]

3.构建镜像

[root@localhost hellodocker]# docker build -t hello-docker-app .
[+] Building 99.0s (8/8) FINISHED                                                                                    docker:default
 => [internal] load build definition from Dockerfile                                                                           0.0s
 => => transferring dockerfile: 471B                                                                                           0.0s
 => [internal] load metadata for docker.io/library/openjdk:8-jdk-slim                                                          6.5s
 => [internal] load .dockerignore                                                                                              0.0s
 => => transferring context: 2B                                                                                                0.0s
 => [1/3] FROM docker.io/library/openjdk:8-jdk-slim@sha256:19578a1e13b7a1e4cab9b227fb7b5d80e14665cf4024c6407d72ba89842a97ed   92.3s
 => => resolve docker.io/library/openjdk:8-jdk-slim@sha256:19578a1e13b7a1e4cab9b227fb7b5d80e14665cf4024c6407d72ba89842a97ed    0.0s
 => => sha256:19578a1e13b7a1e4cab9b227fb7b5d80e14665cf4024c6407d72ba89842a97ed 549B / 549B                                     0.0s
 => => sha256:ecb89bb055c1ee4db9da38713b953f6daafefe575c77c6439eabbb85e3168402 1.16kB / 1.16kB                                 0.0s
 => => sha256:80e75f92be33ca2bd4b933633dafc72aa82a34792f9b769063a474e97e163b8b 7.51kB / 7.51kB                                 0.0s
 => => sha256:1efc276f4ff952c055dea726cfc96ec6a4fdb8b62d9eed816bd2b788f2860ad7 31.37MB / 31.37MB                              34.9s
 => => sha256:a2f2f93da48276873890ac821b3c991d53a7e864791aaf82c39b7863c908b93b 1.58MB / 1.58MB                                 6.7s
 => => sha256:1a2de4cc94315f2ba5015e6781672aa8e0b1456a4d488694bb5f016d8f59fa70 210B / 210B                                     0.6s
 => => sha256:9013b84ebbe7aec8b587e257266770d2ac6ec3fce4c27415e74fbaf5928b4549 106.19MB / 106.19MB                            86.5s
 => => extracting sha256:1efc276f4ff952c055dea726cfc96ec6a4fdb8b62d9eed816bd2b788f2860ad7                                      5.3s
 => => extracting sha256:a2f2f93da48276873890ac821b3c991d53a7e864791aaf82c39b7863c908b93b                                      0.3s
 => => extracting sha256:1a2de4cc94315f2ba5015e6781672aa8e0b1456a4d488694bb5f016d8f59fa70                                      0.0s
 => => extracting sha256:9013b84ebbe7aec8b587e257266770d2ac6ec3fce4c27415e74fbaf5928b4549                                      5.5s
 => [internal] load build context                                                                                              0.0s
 => => transferring context: 3.50kB                                                                                            0.0s
 => [2/3] WORKDIR /app                                                                                                         0.1s
 => [3/3] COPY HelloDocker-0.0.1-SNAPSHOT.jar /www/                                                                            0.0s
 => exporting to image                                                                                                         0.0s
 => => exporting layers                                                                                                        0.0s
 => => writing image sha256:f32776754e9069a2ee16bb6f0ed074d589f10e999862ec00ef5459f7df63cd6e                                   0.0s
 => => naming to docker.io/library/hello-docker-app                

4.运行容器

docker run -d -p 8081:8081 --name hello-docker-app hello-docker-app:latest

发布镜像

因为网络的原因,DockerHub访问受限

可以选择阿里云镜像仓库
1.创建镜像仓库
https://cr.console.aliyun.com/cn-hangzhou/instances

2.登录,并推送

$ docker login --username=阿里云用户名 crpi-wyday083gmf517qr.cn-hangzhou.personal.cr.aliyuncs.com
$ docker tag [ImageId] crpi-wyday083gmf517qr.cn-hangzhou.personal.cr.aliyuncs.com/study-docker-dong/study-docker:[镜像版本号]
$ docker push crpi-wyday083gmf517qr.cn-hangzhou.personal.cr.aliyuncs.com/study-docker-dong/study-docker:[镜像版本号]

请根据实际镜像信息替换示例中的[ImageId]和[镜像版本号]参数。

例如:

[root@localhost home]# docker login --username=#### crpi-wyday083gmf517qr.cn-hangzhou.personal.cr.aliyuncs.com
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
[root@localhost home]# docker images
REPOSITORY         TAG       IMAGE ID       CREATED             SIZE
hello-docker-app   latest    4e888596729f   About an hour ago   313MB
[root@localhost home]# docker tag 4e888596729f  crpi-wyday083gmf517qr.cn-hangzhou.personal.cr.aliyuncs.com/study-docker-dong/study-docker:0.1
[root@localhost home]#  docker push crpi-wyday083gmf517qr.cn-hangzhou.personal.cr.aliyuncs.com/study-docker-dong/study-docker:0.1
The push refers to repository [crpi-wyday083gmf517qr.cn-hangzhou.personal.cr.aliyuncs.com/study-docker-dong/study-docker]
50dffe7bb8c2: Pushed 
1a752e3887a2: Pushed 
954be880ce7c: Pushed 
cd5a0a9f1e01: Pushed 
eafe6e032dbd: Pushed 
92a4e8a3140f: Pushed 
0.1: digest: sha256:f8bc50c6e28bd9b05dd9ccc3742e0983f1e8dd9bbeaf830c21424430cb2b69e5 size: 1579

Docker网络

docker0

[root@localhost home]# ifconfig

#docker0地址
docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        inet6 fe80::42:30ff:feb8:9868  prefixlen 64  scopeid 0x20<link>
        ether 02:42:30:b8:98:68  txqueuelen 0  (Ethernet)
        RX packets 15  bytes 1317 (1.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 20  bytes 2173 (2.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

#本机主机网卡地址
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.88.100  netmask 255.255.255.0  broadcast 192.168.88.255
        inet6 fe80::da66:d094:5341:6709  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:4d:04:a5  txqueuelen 1000  (Ethernet)
        RX packets 450595  bytes 243879983 (232.5 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 404353  bytes 238955182 (227.8 MiB)
        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
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 14  bytes 1185 (1.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 14  bytes 1185 (1.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

当创建一个容器时,会创建一个容器的网卡

dong@dong-ser:~$ docker run -d -P --name tomcat01 tomcat
1aac770366292ffaf783212df5e62b7f5fb8e311e5a0bcc80e4e6958cfd0cbf0

#查看容器ip
dong@dong-ser:~$ docker exec -it tomcat01 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 0e:3a:c4:99:b3:1c  txqueuelen 0  (Ethernet)
        RX packets 2299  bytes 29290019 (29.2 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1553  bytes 88357 (88.3 KB)
        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
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        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

#主机去ping容器ip
dong@dong-ser:~$ ping  172.17.0.2
PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.207 ms
64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.086 ms
64 bytes from 172.17.0.2: icmp_seq=3 ttl=64 time=0.085 ms
64 bytes from 172.17.0.2: icmp_seq=4 ttl=64 time=0.086 ms
64 bytes from 172.17.0.2: icmp_seq=5 ttl=64 time=0.112 ms


## 发现linux可以ping到容器

只要安装了docker,就会有一个docker0网卡,这是evth-pair技术
我们每安装一个容器,docker都会容器分配一个ip地址

#容器和容器之间是否可以ping通?

dong@dong-ser:~$ docker exec -it tomcat02 ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.3  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 2e:f0:d7:a3:eb:02  txqueuelen 0  (Ethernet)
        RX packets 1955  bytes 29271279 (29.2 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1669  bytes 94569 (94.5 KB)
        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
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        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

dong@dong-ser:~$ docker exec -it tomcat01 ping 172.17.0.3
PING 172.17.0.3 (172.17.0.3) 56(84) bytes of data.
64 bytes from 172.17.0.3: icmp_seq=1 ttl=64 time=0.262 ms
64 bytes from 172.17.0.3: icmp_seq=2 ttl=64 time=0.085 ms
64 bytes from 172.17.0.3: icmp_seq=3 ttl=64 time=0.088 ms
64 bytes from 172.17.0.3: icmp_seq=4 ttl=64 time=0.098 ms
64 bytes from 172.17.0.3: icmp_seq=5 ttl=64 time=0.059 ms

#发现可以ping通

img
img

当有个场景,项目中配置 database url = ip,如果项目不重启,数据库ip换掉了(容器每次启动都会分配一个ip地址),那此时可以通过容器来访问吗?

dong@dong-ser:~$ docker run -d -P --name tomcat03 --link tomcat02 tomcat
58516c559a114c317620fe27164f1c1798577a8d219116272c3d64848ae6bfdc

dong@dong-ser:~$ docker exec -it tomcat03 ping tomcat02
PING tomcat02 (172.17.0.3) 56(84) bytes of data.
64 bytes from tomcat02 (172.17.0.3): icmp_seq=1 ttl=64 time=0.346 ms
64 bytes from tomcat02 (172.17.0.3): icmp_seq=2 ttl=64 time=0.072 ms
64 bytes from tomcat02 (172.17.0.3): icmp_seq=3 ttl=64 time=0.056 ms
64 bytes from tomcat02 (172.17.0.3): icmp_seq=4 ttl=64 time=0.111 ms

#发现可以通过名字ping通
dong@dong-ser:~$ docker exec -it tomcat03 /bin/bash
root@58516c559a11:/usr/local/tomcat# cd /etc/
root@58516c559a11:/etc# ls |grep host
host.conf
hostname
hosts
root@58516c559a11:/etc# cat hosts
172.17.0.3      tomcat02 bde900575b7d

#可以发现容器的hosts文件,里面有容器的ip和容器的名字

--link参数 就是在容器启动的时候,自动把容器的ip和容器的名字写入到容器的hosts文件中

自定义网络

查看所有网络格式

dong@Server:~$ docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
e72c13904ea5   bridge    bridge    local
59e50334ae79   host      host      local
c1cf1e174e7b   none      null      local

网络模式
bridge: 桥接(默认)
none: 不使用网络
host: 容器与主机共享网络
container: 容器与另一个容器共享网络

#这两个是一样的,会模式使用bridge
docker run -d -P --name tomcat04 --network bridge tomcat
docker run -d -P --name tomcat04  tomcat

#docker0,不能使用域名访问,--link可以打通

#创建自定义网络
dong@Server:~$ docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
b6729db6b11fa05a8e37ad554199b2023b275ead6b7a650eaf2bab175a0a4e56
dong@Server:~$ docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
e72c13904ea5   bridge    bridge    local
59e50334ae79   host      host      local
b6729db6b11f   mynet     bridge    local
c1cf1e174e7b   none      null      local
dong@Server:~$ docker network inspect mynet
[
    {
        "Name": "mynet",
        "Id": "b6729db6b11fa05a8e37ad554199b2023b275ead6b7a650eaf2bab175a0a4e56",
        "Created": "2025-03-30T08:49:16.456872668Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv4": true,
        "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": {}
    }
]


#创建容器使用自定义网路时
dong@Server:~$ docker run -d -P --name tomcat04 --net mynet tomcat
8d3d699ed42cac76f67a5954c3e0ebd8667d3cf9900803a95e42001d43bed1e6
dong@Server:~$ docker run -d -P --name tomcat05 --net mynet tomcat
c15b3f614be7d356a73c1c60bab2ce7db74d5b9ecf49bcbb7146820066f770f1
dong@Server:~$ docker network inspect mynet
[
    {
        "Name": "mynet",
        "Id": "b6729db6b11fa05a8e37ad554199b2023b275ead6b7a650eaf2bab175a0a4e56",
        "Created": "2025-03-30T08:49:16.456872668Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv4": true,
        "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": {
            "8d3d699ed42cac76f67a5954c3e0ebd8667d3cf9900803a95e42001d43bed1e6": {
                "Name": "tomcat04",
                "EndpointID": "b98738b42e183a8d16ec8ae85ec35cdfe51186e56088cd9d8c7fc473b9a80c30",
                "MacAddress": "02:54:7d:82:59:00",
                "IPv4Address": "192.168.0.2/16",
                "IPv6Address": ""
            },
            "c15b3f614be7d356a73c1c60bab2ce7db74d5b9ecf49bcbb7146820066f770f1": {
                "Name": "tomcat05",
                "EndpointID": "9748e312843dc9c834f7ccd9a4fcaefdb0eee343882ede5a8da2aca26fb78b11",
                "MacAddress": "fa:e6:fd:98:31:22",
                "IPv4Address": "192.168.0.3/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]

#测试连通性
##主机ping容器
dong@Server:~$ ping -c 4 192.168.0.2
PING 192.168.0.2 (192.168.0.2) 56(84) bytes of data.
64 bytes from 192.168.0.2: icmp_seq=1 ttl=64 time=0.073 ms
64 bytes from 192.168.0.2: icmp_seq=2 ttl=64 time=0.081 ms
64 bytes from 192.168.0.2: icmp_seq=3 ttl=64 time=0.089 ms
64 bytes from 192.168.0.2: icmp_seq=4 ttl=64 time=0.084 ms

##容器ping容器ip
dong@Server:~$ docker exec -it tomcat04 ping -c 4 192.168.0.3
PING 192.168.0.3 (192.168.0.3) 56(84) bytes of data.
64 bytes from 192.168.0.3: icmp_seq=1 ttl=64 time=0.113 ms
64 bytes from 192.168.0.3: icmp_seq=2 ttl=64 time=0.306 ms
64 bytes from 192.168.0.3: icmp_seq=3 ttl=64 time=0.098 ms
64 bytes from 192.168.0.3: icmp_seq=4 ttl=64 time=0.111 ms

##容器ping名字
dong@Server:~$ docker exec -it tomcat04 ping -c 4 tomcat04
PING tomcat04 (192.168.0.2) 56(84) bytes of data.
64 bytes from 8d3d699ed42c (192.168.0.2): icmp_seq=1 ttl=64 time=0.040 ms
64 bytes from 8d3d699ed42c (192.168.0.2): icmp_seq=2 ttl=64 time=0.044 ms
64 bytes from 8d3d699ed42c (192.168.0.2): icmp_seq=3 ttl=64 time=0.078 ms
64 bytes from 8d3d699ed42c (192.168.0.2): icmp_seq=4 ttl=64 time=0.075 ms

网络连通

img

将tomcat01 和 mynet网络连接起来

#先测试能否将tomcat01 ping通tomcat-net-01
dong@Server:~$ docker exec -it tomcat01 ping tomcat-net-01
ping: tomcat-net-01: Name or service not known

#将tomcat01 和 mynet网络连接起来
dong@Server:~$ docker network connect mynet tomcat01
dong@Server:~$ docker network inspect mynet
[
    {
        "Name": "mynet",
        "Id": "b6729db6b11fa05a8e37ad554199b2023b275ead6b7a650eaf2bab175a0a4e56",
        "Created": "2025-03-30T08:49:16.456872668Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv4": true,
        "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": {
            "3db7006da4af4808a860a033c9897f8d26fcf74a76d44414aaa32af8b064063f": {
                "Name": "tomcat01",
                "EndpointID": "6fdda9369e2131cdd9961e190bbd0d907cd8f00244fc97503aac1d15b40c0616",
                "MacAddress": "8a:4d:fa:ae:50:f5",
                "IPv4Address": "192.168.0.4/16",
                "IPv6Address": ""
            },
            "8d3d699ed42cac76f67a5954c3e0ebd8667d3cf9900803a95e42001d43bed1e6": {
                "Name": "tomcat-net-01",
                "EndpointID": "b98738b42e183a8d16ec8ae85ec35cdfe51186e56088cd9d8c7fc473b9a80c30",
                "MacAddress": "02:54:7d:82:59:00",
                "IPv4Address": "192.168.0.2/16",
                "IPv6Address": ""
            },
            "c15b3f614be7d356a73c1c60bab2ce7db74d5b9ecf49bcbb7146820066f770f1": {
                "Name": "tomcat-net-02",
                "EndpointID": "9748e312843dc9c834f7ccd9a4fcaefdb0eee343882ede5a8da2aca26fb78b11",
                "MacAddress": "fa:e6:fd:98:31:22",
                "IPv4Address": "192.168.0.3/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]


#测试连通性
dong@Server:~$ 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.173 ms
64 bytes from tomcat-net-01.mynet (192.168.0.2): icmp_seq=2 ttl=64 time=0.085 ms
64 bytes from tomcat-net-01.mynet (192.168.0.2): icmp_seq=3 ttl=64 time=0.061 ms
64 bytes from tomcat-net-01.mynet (192.168.0.2): icmp_seq=4 ttl=64 time=0.082 ms

#通过网络连通就可以实现不同网络容器间通信了

Redis集群部署


Docker Compose

Docker Swarm

posted @ 2025-03-24 21:10  -殇情-  阅读(20)  评论(0)    收藏  举报