Docker
Docker
安装
ubuntu 22.04
- 卸载旧版本(如果有)
sudo apt remove docker docker-engine docker.io containerd runc -y
- 更新软件包索引
sudo apt update
- 安装必要的依赖
sudo apt install -y ca-certificates curl gnupg
- 添加 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
- 添加 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
- 更新软件包索引
sudo apt update
- 安装 Docker
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
- 启动并设置开机自启
sudo systemctl enable --now docker
- 测试 Docker
sudo docker run hello-world
centos 7
- 使用国内镜像源
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
- 安装 Docker
sudo yum install -y docker-ce docker-ce-cli containerd.io
- 测试 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 主机目录:容器目录



实战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


通过Navicat测试连接,可以连接到

并且数据卷也正确挂载
具名挂载和匿名挂载
查看挂载卷
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 宿主机目录:容器目录
数据卷容器
多个容器共享一个数据卷

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,用于 RUN、CMD 和 ENTRYPOINT 指令。 |
构建镜像
mycnetos

这个容器只有基础的系统,一些基本的工具没有
现在创建一个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

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通


--link
当有个场景,项目中配置 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
网络连通

将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集群部署

浙公网安备 33010602011771号