Centos 7下docker 学习笔记

1.centos7安装docker
https://blog.csdn.net/u014069688/article/details/100532774

2. 配置镜像加速器
注册阿里云账号,找到容器与镜像服务-镜像加速器
针对Docker客户端版本大于 1.10.0 的用户

您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://849edctl.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

3.镜像
docker version #查看docker 版本信息
docker 命令 --help #查看官方使用说明

docker run 镜像名 #运行镜像

docker images #查看本机镜像,参数-a显示全部,参数-q显示镜像ID

docker search 镜像名 #搜索查询仓库的镜像,加参数 --filter=star=300 可过滤为显示收藏数大于等于300的镜像


docker pull 镜像名:版本号 #从仓库下载镜像,如果不指定版本的话默认下载最新版本,分层下载..?联合文件系统..?

docker remove rmi -f 镜像ID 镜像名 #删除指定镜像,可以在后面加语句 $(docker images -aq)删除查询出来的所有镜像


4.容器
docker stop 容器ID
docker kill 容器ID
docker start 容器ID
docker restart 容器ID
docker ps #查看正在运行的容器, 参数-a 显示正在运行的容器,参数 -q显示容器Id
dcoker run -d #后台运行,如容器中没有运行的进程会自动关闭
docker run -it /bin/bash #使用交互命令进入容器,镜像ID会作为主机名显示
docker rm -f 容器ID #删除指定容器,可以在后面加语句 $(docker ps -aq)删除查询出来的所有容器


5.容器常用命令
docker logs -t -f --tail 显示的日志数量 容器Id #查看日志

docker top 容器ID #查看容器中运行的进程
UID PID PPID C STIME TTY TIME CMD
root 64481 64466 0 14:16 ? 00:00:00 /bin/sh -c while true;do echo sys;sleep 1;done

docker inspect 容器ID #查看镜像的元数据

docker exec -it 容器ID /bin/bash #进入容器后,打开一个新的终端,可以在终端进行操作
docker attach 容器ID #进入容器正在执行的终端,不会启动新的进程。

docker cp 容器ID:容器内文件路径 目的主机路径 #从容器中复制文件到其他主机,退出容器也可以将文件拷贝出来

docker stats #查看docker主机资源使用情况


6.小结
安装Nginx
search 镜像 #从仓库下载镜像
pull 镜像 #下载镜像至本机
docker run -d --name nginx01 -p 3344:80 nginx #运行镜像并重命名同时将Nginx默认80端口映射到宿主机3344端口以便外网访问

安装Elasticsearch+kibana

下载启动Elasticsearch
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2

添加-e 参数限制Elasticsearch内存使用
docker run -d --name elasticsearch02 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms256m -Xms1024m" elasticsearch:7.6.2

可视化(图形化界面)

docker run -d -p 8088:9000 \
--restart=always -v /var/run/docker.sock: /var/run/docker.sock --privileged=true portainer/portainer


7.docker 镜像文件分层原理

联合文件系统 ,分层(layer)下载原理,复用已经存在的文件或者说环境并共用一个内核。
Docker境像都是只读的,当容器启动时,一个新的可写层被加载到镜像的顶部)下载,Docker境像都是只读的,当容器启动时,一个新的可写层被加载到镜像的顶部!这一层就是我们通常说的容器层,容器之下的都叫镜像层。

8.commit镜像

docker commit -参数 镜像ID 命令版本信息(tag) #提交镜像成为新的副本参数-a 注明提交人,参数-m提交版本说明

打包的过程以及结果类似于VM ware 快照备份的概念。

[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
635ba315d361 tomcat "catalina.sh run" 10 minutes ago Up 10 minutes 0.0.0.0:8080->8080/tcp cranky_ramanujan
[root@docker ~]# docker commit -a="sys" -m="add webapps" 635ba315d361 tomcat02:1.0
sha256:5f8c29b80f650297943d7b4702f4082c2b14dbf47236d882ec6e931c6cea2ae7
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat02 1.0 5f8c29b80f65 17 seconds ago 653MB
redis latest 621ceef7494a 2 months ago 104MB
tomcat latest 040bdb29ab37 2 months ago 649MB
nginx latest f6d0b4767a6c 2 months ago 133MB
centos latest 300e315adb2f 3 months ago 209MB
elasticsearch 7.6.2 f29a1ee41030 12 months ago 791MB

9.容器数据卷
什么是容器数据卷
docker的理念回顾...
将应用和环境打包成一个镜像!
数据安全?如果数据都在容器中,那么我们容器删除,数据就会丢失!需求:数据可以持久化MySQL,容器删了,删库跑路!需求:MySQL数据可以存储在本地!
容器之间可以有一个数据共享的技术!Docker容器中产生的数据,同步到本地!这就是卷技术。目录的挂载,将我们容器内的目录,挂载到Linux上面,总结就是为了容器的持久化和同步操作,容器之间也可以数据共享。

方式一:通过命令挂载
docker -it -v 主机目录:容器内目录 #类似于-p docker 端口映射 ,文件同步是双向绑定的

docker inspect 镜像ID 查看挂载情况
"Mounts": [
{
"Type": "bind",
"Source": "/home/test",
"Destination": "/home",
"Mode": "",
"RW": true,
"Propagation": "rprivate"

测试Mysql部署
docker run -d -p 3310:3306 -v/home/mysq1/conf:/etc/mysq1/conf.d -v/home/mysq1/data:/var/1ib/mysq1 -e MYSQL_RO0T_PASSWORD=123456 --name mysql01 mysql:5.7

注解:内部端口3306映射到外部3310端口,挂载容器mysql配置文件到本地挂载容器mysql数据文件到本地,修改环境配置文件设置mysql密码重命名以后台启动方式运行

#匿名挂载
-v容器内路径!
docker run -d -p --name nginx01 -v /ect/nginx nginx
#查看所有的volume的情况
[root@kuangshen home] # docker volume lslocal
9f38292179faa178afcce54d80be99d4ddd68c91d2a68870bcece72d2b7ed061
#这里发现,这种就是匿名挂载,我们在-v只写了容器内的路径,没有写容器外的路径!

#具名挂载
root@docker ~]# docker run -d -P --name nginx03 -v juming-nginx:/ect/nginx nginx
d06c9011bff95389b0fed2aab61d24ea84ad397dcbc2e4bfcb29b09472498bca
[root@docker ~]# docker volume ls
DRIVER VOLUME NAME
local 2ee6db3328cb40785372cfe5dac9d23814c8451b61b305ba5d3d02f00300d5dd
local 47b67994d59c53d7b9c2ae6790ba5ff5610b0d6605d4c33aea825b038b3502c8
local 65a47c2a6d34dccff798a46a6931d84ddaf2183f9bb0c52a5e1aadcbc3f2f708
local 9297128e0cdc25e655beb51a7ef958e6f035af1679d923ac528d2e2d37d3b11c
local a903e56f3076504627c9eb9bcec992c0f1d04deccf6b0211aafb827c7f4a9477
local juming-nginx

[root@docker ~]# docker volume inspect juming-nginx
[
{
"CreatedAt": "2021-03-31T14:22:21+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/juming-nginx/_data",
"Name": "juming-nginx",
"Options": null,
"Scope": "local"
}
#如何确定是具名挂载还是匿名挂载,还是指定路径挂载!-v 容器内路径
#匿名挂载
-v卷名:容器内路径#具名挂载
-v/宿主机路径::容器内路径#指定路径挂载!
拓展:
#通过-v容器内路径:
rorw改变读写权限
roreadonly #只读
rwreadwrite #可读可写
#一旦设置ro只读,就只能通过宿主机修改,容器内部就不能修改了。

docker run -d -p --name nginx02 -v juming-nginx :/etc/nginx:ro nginxdocker run -d -p --name nginx02 -v juming-nginx :/etc/nginx:rw nginx

方式二:使用build命令构建新的镜像

[root@docker docker-volume]# docker build -f dockerfile1 -t sys/centos .
Sending build context to Docker daemon 2.048kB
Step 1/4 : FROM centos
---> 300e315adb2f
Step 2/4 : VOLUME ("volume01","volume02")
---> Running in 584282da852f
Removing intermediate container 584282da852f
---> 1fd10191b9af
Step 3/4 : CMD echo "---end---"
---> Running in 578d4c8edd02
Removing intermediate container 578d4c8edd02
---> 80df2192c763
Step 4/4 : CMD /bin/bash
---> Running in 82eebf188948
Removing intermediate container 82eebf188948
---> bd7cd2e53090
Successfully built bd7cd2e53090
Successfully tagged sys/centos:latest
[root@docker docker-volume]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
sys/centos latest bd7cd2e53090 14 seconds ago 209MB
tomcat02 1.0 5f8c29b80f65 25 hours ago 653MB
mysql 5.7 a70d36bc331a 2 months ago 449MB
redis latest 621ceef7494a 2 months ago 104MB
tomcat latest 040bdb29ab37 2 months ago 649MB
nginx latest f6d0b4767a6c 2 months ago 133MB
centos latest 300e315adb2f 3 months ago 209MB
elasticsearch 7.6.2 f29a1ee41030 12 months ago

 

10.docker file

dockerfile的指令,必须大写,从上到下执行

FROM #基础镜像
MAINTAINER #镜像是谁写的,姓名+邮箱
RUN #镜像构建时需要运行的命令
ADD #步骤
WORKDIR #镜像的工作目录
LOLUME #挂载的目录
EXPOSE #保留端口配置
CMD #指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT #指定这个容器启动的时候要运行的命令,可以追加命令
COPY #将文件拷贝到镜像中
ENV #构建的时候设置环境变量

#实战测试
1.编写dockfile脚本文件
[root@docker dockerfile]# cat my-centos
FROM centos
MAINTAINER sys<350374772@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

2.通过这个文件构建镜像
docker build -f my-centos -t mycentos:1.0 .
Sending build context to Docker daemon 2.048kB
Step 1/10 : FROM centos
---> 300e315adb2f
Step 2/10 : MAINTAINER sys<350374772@qq.com>
---> Running in 0eb91fe34508
Removing intermediate container 0eb91fe34508
---> ff4492a95eef
Step 3/10 : ENV MYPATH /usr/local
---> Running in 4112bf1b8af9
Removing intermediate container 4112bf1b8af9
---> 214124bbaecc
Step 4/10 : WORKDIR $MYPATH
Removing intermediate container 86b700309c3d
---> e76af98085b6
Step 5/10 : RUN yum -y install vim
---> Running in 4de7d9b6f5f5
CentOS Linux 8 - AppStream 310 kB/s | 6.3 MB 00:20
CentOS Linux 8 - BaseOS 866 kB/s | 2.3 MB 00:02
CentOS Linux 8 - Extras 6.5 kB/s | 9.6 kB 00:01
Dependencies resolved.
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
vim-enhanced x86_64 2:8.0.1763-15.el8 appstream 1.4 M
Installing dependencies:
gpm-libs x86_64 1.20.7-15.el8 appstream 39 k
vim-common x86_64 2:8.0.1763-15.el8 appstream 6.3 M
vim-filesystem noarch 2:8.0.1763-15.el8 appstream 48 k
which x86_64 2.21-12.el8 baseos 49 k

Transaction Summary
================================================================================
Install 5 Packages

Total download size: 7.8 M
Installed size: 30 M
Downloading Packages:
(1/5): gpm-libs-1.20.7-15.el8.x86_64.rpm 135 kB/s | 39 kB 00:00
(2/5): vim-filesystem-8.0.1763-15.el8.noarch.rp 190 kB/s | 48 kB 00:00
(3/5): which-2.21-12.el8.x86_64.rpm 164 kB/s | 49 kB 00:00
(4/5): vim-enhanced-8.0.1763-15.el8.x86_64.rpm 235 kB/s | 1.4 MB 00:05
(5/5): vim-common-8.0.1763-15.el8.x86_64.rpm 236 kB/s | 6.3 MB 00:27
--------------------------------------------------------------------------------
Total 281 kB/s | 7.8 MB 00:28
warning: /var/cache/dnf/appstream-02e86d1c976ab532/packages/gpm-libs-1.20.7-15.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEY
CentOS Linux 8 - AppStream 125 kB/s | 1.6 kB 00:00
Importing GPG key 0x8483C65D:
Userid : "CentOS (CentOS Official Signing Key) <security@centos.org>"
Fingerprint: 99DB 70FA E1D7 CE22 7FB6 4882 05B5 55B3 8483 C65D
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
Key imported successfully
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : which-2.21-12.el8.x86_64 1/5
Installing : vim-filesystem-2:8.0.1763-15.el8.noarch 2/5
Installing : vim-common-2:8.0.1763-15.el8.x86_64 3/5
Installing : gpm-libs-1.20.7-15.el8.x86_64 4/5
Running scriptlet: gpm-libs-1.20.7-15.el8.x86_64 4/5
Installing : vim-enhanced-2:8.0.1763-15.el8.x86_64 5/5
Running scriptlet: vim-enhanced-2:8.0.1763-15.el8.x86_64 5/5
Running scriptlet: vim-common-2:8.0.1763-15.el8.x86_64 5/5
Verifying : gpm-libs-1.20.7-15.el8.x86_64 1/5
Verifying : vim-common-2:8.0.1763-15.el8.x86_64 2/5
Verifying : vim-enhanced-2:8.0.1763-15.el8.x86_64 3/5
Verifying : vim-filesystem-2:8.0.1763-15.el8.noarch 4/5
Verifying : which-2.21-12.el8.x86_64 5/5

Installed:
gpm-libs-1.20.7-15.el8.x86_64 vim-common-2:8.0.1763-15.el8.x86_64
vim-enhanced-2:8.0.1763-15.el8.x86_64 vim-filesystem-2:8.0.1763-15.el8.noarch
which-2.21-12.el8.x86_64

Complete!
Removing intermediate container 4de7d9b6f5f5
---> dc6b264959c2
Step 6/10 : RUN yum -y install net-tools
---> Running in 1e378fcf7b3f
Last metadata expiration check: 0:00:45 ago on Tue Apr 6 08:17:41 2021.
Dependencies resolved.
================================================================================
Package Architecture Version Repository Size
================================================================================
Installing:
net-tools x86_64 2.0-0.52.20160912git.el8 baseos 322 k

Transaction Summary
================================================================================
Install 1 Package

Total download size: 322 k
Installed size: 942 k
Downloading Packages:
net-tools-2.0-0.52.20160912git.el8.x86_64.rpm 480 kB/s | 322 kB 00:00
--------------------------------------------------------------------------------
Total 279 kB/s | 322 kB 00:01
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : net-tools-2.0-0.52.20160912git.el8.x86_64 1/1
Running scriptlet: net-tools-2.0-0.52.20160912git.el8.x86_64 1/1
Verifying : net-tools-2.0-0.52.20160912git.el8.x86_64 1/1

Installed:
net-tools-2.0-0.52.20160912git.el8.x86_64

Complete!
Removing intermediate container 1e378fcf7b3f
---> 2ce3095a807c
Step 7/10 : EXPOSE 80
---> Running in 16153bf4aa66
Removing intermediate container 16153bf4aa66
---> 4c30ee610151
Step 8/10 : CMD echo $MYPATH
---> Running in 99769749f935
Removing intermediate container 99769749f935
---> 0742c6a35f19
Step 9/10 : CMD echo "---end-----"
---> Running in 2ffa18a52591
Removing intermediate container 2ffa18a52591
---> 61f6dc3fcf5d
Step 10/10 : CMD /bin/bash
---> Running in f97180b6eb24
Removing intermediate container f97180b6eb24
---> 133df599b882

Successfully built 133df599b882
Successfully tagged mycentos:1.0

3.测试运行

docker run -it xx /bin/bash

docker history 133df599b882
IMAGE CREATED CREATED BY SIZE COMMENT
133df599b882 About an hour ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "/bin… 0B
61f6dc3fcf5d About an hour ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "echo… 0B
0742c6a35f19 About an hour ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "echo… 0B
4c30ee610151 About an hour ago /bin/sh -c #(nop) EXPOSE 80 0B
2ce3095a807c About an hour ago /bin/sh -c yum -y install net-tools 23.3MB
dc6b264959c2 About an hour ago /bin/sh -c yum -y install vim 58MB
e76af98085b6 About an hour ago /bin/sh -c #(nop) WORKDIR /usr/local 0B
214124bbaecc About an hour ago /bin/sh -c #(nop) ENV MYPATH=/usr/local 0B
ff4492a95eef About an hour ago /bin/sh -c #(nop) MAINTAINER sys<350374772@… 0B
300e315adb2f 3 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 3 months ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B
<missing> 3 months ago /bin/sh -c #(nop) ADD file:bd7a2aed6ede423b7… 209MB

#CMD和ENTRYPOINT的区别

CMD [“”] 中的命令可以在容器运行时被追加的其他命令或者参数覆盖运行,而ENTRYPOINT可以只追加不覆盖。

如dcokerfile脚本中包含 CMD["ls","-a"] dcoker run xxx ls-al 那么运行后会执行ls -al的效果不会,脚本中的ls-a 将被覆盖。

如dcokerfile脚本中包含 ENTRYPOINT["ls","-a"] dcoker run xxx -l 那么运行后会执行脚本中的ls-a 然后在后面追加一个-l的参数。


#练习Tomcat镜像打包发布
1.编写dockerfile

FROM centos
MAINTAINET sys<350374772@qq.com>

COPY readme.txt /usr/local/readme.txt

ADD jdk-8u241-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-10.0.5.tar.gz /usr/local/

RUN yum -y install vim

ENV MYPATH /usr/local
WORKDIR $MYPATH

ENV JAVA_HOME /usr/local/jdk-1.8.0_11
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-10.0.5
ENV CATALINA_BASH /usr/local/apache-tomcat-10.0.5
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

EXPOSE 8080

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

2.build systomcat 镜像

[root@docker soft]# docker build -t systomcat .
Sending build context to Docker daemon 263.4MB
Step 1/15 : FROM centos
---> 300e315adb2f
Step 2/15 : MAINTAINER sys<350374772@qq.com>
---> Using cache
---> ff4492a95eef
Step 3/15 : COPY readme.txt /usr/local/readme.txt
---> 0fff326d9fe6
Step 4/15 : ADD jdk-8u241-linux-x64.tar.gz /usr/local/
---> ba97e47e5932
Step 5/15 : ADD apache-tomcat-10.0.5.tar.gz /usr/local/
---> 22b5757596b8
Step 6/15 : RUN yum -y install vim
---> Running in eba2a35a934a
CentOS Linux 8 - AppStream 4.4 MB/s | 6.3 MB 00:01
CentOS Linux 8 - BaseOS 1.9 MB/s | 2.3 MB 00:01
CentOS Linux 8 - Extras 8.3 kB/s | 9.6 kB 00:01
Dependencies resolved.
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
vim-enhanced x86_64 2:8.0.1763-15.el8 appstream 1.4 M
Installing dependencies:
gpm-libs x86_64 1.20.7-15.el8 appstream 39 k
vim-common x86_64 2:8.0.1763-15.el8 appstream 6.3 M
vim-filesystem noarch 2:8.0.1763-15.el8 appstream 48 k
which x86_64 2.21-12.el8 baseos 49 k

Transaction Summary
================================================================================
Install 5 Packages

Total download size: 7.8 M
Installed size: 30 M
Downloading Packages:
(1/5): gpm-libs-1.20.7-15.el8.x86_64.rpm 380 kB/s | 39 kB 00:00
(2/5): vim-filesystem-8.0.1763-15.el8.noarch.rp 1.8 MB/s | 48 kB 00:00
(3/5): which-2.21-12.el8.x86_64.rpm 1.3 MB/s | 49 kB 00:00
(4/5): vim-enhanced-8.0.1763-15.el8.x86_64.rpm 1.5 MB/s | 1.4 MB 00:00
(5/5): vim-common-8.0.1763-15.el8.x86_64.rpm 6.9 MB/s | 6.3 MB 00:00
--------------------------------------------------------------------------------
Total 4.2 MB/s | 7.8 MB 00:01
warning: /var/cache/dnf/appstream-02e86d1c976ab532/packages/gpm-libs-1.20.7-15.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEY
CentOS Linux 8 - AppStream 1.6 MB/s | 1.6 kB 00:00
Importing GPG key 0x8483C65D:
Userid : "CentOS (CentOS Official Signing Key) <security@centos.org>"
Fingerprint: 99DB 70FA E1D7 CE22 7FB6 4882 05B5 55B3 8483 C65D
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
Key imported successfully
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : which-2.21-12.el8.x86_64 1/5
Installing : vim-filesystem-2:8.0.1763-15.el8.noarch 2/5
Installing : vim-common-2:8.0.1763-15.el8.x86_64 3/5
Installing : gpm-libs-1.20.7-15.el8.x86_64 4/5
Running scriptlet: gpm-libs-1.20.7-15.el8.x86_64 4/5
Installing : vim-enhanced-2:8.0.1763-15.el8.x86_64 5/5
Running scriptlet: vim-enhanced-2:8.0.1763-15.el8.x86_64 5/5
Running scriptlet: vim-common-2:8.0.1763-15.el8.x86_64 5/5
Verifying : gpm-libs-1.20.7-15.el8.x86_64 1/5
Verifying : vim-common-2:8.0.1763-15.el8.x86_64 2/5
Verifying : vim-enhanced-2:8.0.1763-15.el8.x86_64 3/5
Verifying : vim-filesystem-2:8.0.1763-15.el8.noarch 4/5
Verifying : which-2.21-12.el8.x86_64 5/5

Installed:
gpm-libs-1.20.7-15.el8.x86_64 vim-common-2:8.0.1763-15.el8.x86_64
vim-enhanced-2:8.0.1763-15.el8.x86_64 vim-filesystem-2:8.0.1763-15.el8.noarch
which-2.21-12.el8.x86_64

Complete!
Removing intermediate container eba2a35a934a
---> 86efc6b6055a
Step 7/15 : ENV MYPATH /usr/local
---> Running in 117df6e76294
Removing intermediate container 117df6e76294
---> f183ffa8aeab
Step 8/15 : WORKDIR $MYPATH
Removing intermediate container 6c9466a7ed72
---> a178e33f545c
Step 9/15 : ENV JAVA_HOME /usr/local/jdk-1.8.0_11
---> Running in c58587098721
Removing intermediate container c58587098721
---> 47e6ea62297d
Step 10/15 : ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
---> Running in 6d3f9fdee463
Removing intermediate container 6d3f9fdee463
---> 8f4154009303
Step 11/15 : ENV CATALINA_HOME /usr/local/apache-tomcat-10.0.5
---> Running in 63525e1bbbf5
Removing intermediate container 63525e1bbbf5
---> 63f09dca4e8b
Step 12/15 : ENV CATALINA_BASH /usr/local/apache-tomcat-10.0.5
---> Running in 1e8424cfa8fb
Removing intermediate container 1e8424cfa8fb
---> dabaa336dce8
Step 13/15 : ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
---> Running in e15ac6cc9ce9
Removing intermediate container e15ac6cc9ce9
---> a7fc8c73fbee
Step 14/15 : EXPOSE 8080
---> Running in 380782c8ca07
Removing intermediate container 380782c8ca07
---> 807ef887a25b
Step 15/15 : CMD /usr/local/apache-tomcat-10.0.5/bin/startup.sh && tail -F /url/local/apache-tomcat-10.0.5/bin/logs/catalina.out
---> Running in c54dfd29ec2f
Removing intermediate container c54dfd29ec2f
---> e6f3fbb8137d
Successfully built e6f3fbb8137d
Successfully tagged systomcat:latest

3.启动制作的镜像以及发布镜像到DockerHub

dcoker login -u # 登录dcokerHub

docker push e6f3fbb8137d testtomcat:1.0

[root@docker ~]# docker tag e6f3fbb8137d sy/systomcat:1.0
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
sy/systomcat 1.0 e6f3fbb8137d 4 hours ago 687MB
sy/systomcat latest e6f3fbb8137d 4 hours ago 687MB
systomcat latest e6f3fbb8137d 4 hours ago 687MB
mycentos 1.0 133df599b882 47 hours ago 291MB
sys/centos latest bd7cd2e53090 8 days ago 209MB
tomcat02 1.0 5f8c29b80f65 9 days ago 653MB
mysql 5.7 a70d36bc331a 2 months ago 449MB
redis latest 621ceef7494a 2 months ago 104MB
tomcat latest 040bdb29ab37 2 months ago 649MB
nginx latest f6d0b4767a6c 2 months ago 133MB
centos latest 300e315adb2f 4 months ago 209MB
elasticsearch 7.6.2 f29a1ee41030 12 months ago 791MB
[root@docker ~]# docker push sy/systomcat:1.0
The push refers to repository [docker.io/sy/systomcat]
4d8fc26fe46c: Preparing
8c1af9f29fa1: Preparing
f2bcf5cffe72: Preparing
877b6a691b8c: Preparing
2653d992f4ef: Preparing

docker save e6f3fbb8137d -o /home/soft/ #docker 镜像保存到本地目录

 


11.docker 网络

#主机与docker容器之间是可以互通的,安装docker后主机会分配一个docker0的桥接网卡,由evth-pair技术分配ip给到每一个容器使用。
#我们发现这个容器带来网卡,都是一对对的
# evth-pair 就是一对的虚拟设备接口,他们都是成对出现的,一段连着协议,一段彼此相连# 正因为有这个特性,evth-pair充当一个桥梁,连接各种虚拟网络设备的
# Openstac,Docker容器之间的连接,0Vs的连接,都是使用evth-pair技术
结论: tomcat01和tomcat02是公用的一个路由器,docker0.
所有的容器不指定网络的情况下,都是docker0路由的,docker会给我们的容器分配一个默认的可用IP,容器一旦删除,虚拟网卡也会消失。

容器互联-link
[root@docker ~]# docker run -d --name tomcat_3 --link tomcat_1 tomcat
9f7b4e7f13c61fff7fb60673d925e9ea79adabe0b4a373c00650c817011a606e
[root@docker ~]# docker exec -it tomcat_3 ping tomcat_1
PING tomcat_1 (172.17.0.2) 56(84) bytes of data.
64 bytes from tomcat_1 (172.17.0.2): icmp_seq=1 ttl=64 time=0.239 ms
64 bytes from tomcat_1 (172.17.0.2): icmp_seq=2 ttl=64 time=0.073 ms
64 bytes from tomcat_1 (172.17.0.2): icmp_seq=3 ttl=64 time=0.157 ms

tomcat1反向ping tomcat3发现不通?问题出在哪里?

[root@docker ~]# docker exec -it tomcat_2 ping tomcat_1
ping: tomcat_1: Name or service not known

从这个可以发现容器tomcat3 的/etc/hosts 文件中配置了一个主机名和IP的映射关系。
[root@docker ~]# docker exec -it tomcat_3 cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2 tomcat_1 b1aea1fcabf0
172.17.0.4 9f7b4e7f13c6


#自定义网络

[root@docker ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
5be679dff8f5 bridge bridge local #桥接模式
72b9a21dd170 host host local #主机模式
cda96a6799e9 none null local #空,网络没有配置

#测试
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
ca9a00524dadf1eb2c0b6c725f89fbca73ce795692195e2aa59ea8e71df50e82
[root@docker ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:8a:48:f4 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.107/24 brd 192.168.1.255 scope global noprefixroute ens32
valid_lft forever preferred_lft forever
inet6 fe80::62a0:5a7e:8a87:823b/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:dc:d0:a3:26 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::42:dcff:fed0:a326/64 scope link
valid_lft forever preferred_lft forever
85: br-ca9a00524dad: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:46:8f:45:e8 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.1/16 brd 192.168.255.255 scope global br-ca9a00524dad
valid_lft forever preferred_lft forever

#使用自定义网络的优势:
我们自定义的网络docker都已经帮我们维护好了对应的关系,推荐我们平时这样使用网络!
当我们在部署以及mysql的时候;
redis 不同的集群使用不同的网络,保证集群是安全和健康的
mysql 不同的集群使用不同的网络,保证集群是安全和健康的

[root@docker ~]# docker exec -it tomcat-net1 ping 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=1.13 ms
^C
--- 192.168.0.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 1.129/1.129/1.129/0.000 ms
[root@docker ~]# docker exec -it tomcat-net1 ping tomcat-net2
PING tomcat-net2 (192.168.0.3) 56(84) bytes of data.
64 bytes from tomcat-net2.mynet (192.168.0.3): icmp_seq=1 ttl=64 time=0.235 ms
64 bytes from tomcat-net2.mynet (192.168.0.3): icmp_seq=2 ttl=64 time=0.932 ms
64 bytes from tomcat-net2.mynet (192.168.0.3): icmp_seq=3 ttl=64 time=0.600 ms
64 bytes from tomcat-net2.mynet (192.168.0.3): icmp_seq=4 ttl=64 time=0.210 ms
^C
--- tomcat-net2 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 11ms
rtt min/avg/max/mdev = 0.210/0.494/0.932/0.296 ms

connect命令的语法
docker network connect mynet tomcat01

connect命令的作用
用于将容器(tomcat01)放到了mynet(自定义创建)的网络下,实现了一个容器两个IP。

[root@docker ~]# docker network connect mynet tomcat01
[root@docker ~]# docker network inspect ca9a00524dad
[
{
"Name": "mynet",
"Id": "ca9a00524dadf1eb2c0b6c725f89fbca73ce795692195e2aa59ea8e71df50e82",
"Created": "2021-04-09T13:56:13.12293852+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": {
"23b9508ef742bd5217f017ae61c0e4f3dc3ef292561595da270a628b319de1fb": {
"Name": "tomcat01",
"EndpointID": "b6371346365005633b4c017bb4688846ff0ad8a1eaa0915e30af0d52f7638506",
"MacAddress": "02:42:c0:a8:00:04",
"IPv4Address": "192.168.0.4/16",
"IPv6Address": ""
},
"61df0e1fafd8e342bb2805732d30e649a6c5598fa1368bbe1ab57eebeb146798": {
"Name": "tomcat-net2",
"EndpointID": "5d8df6106137361ef9ae2df8d0da132f1bc7c634e77bdd0ad57e2b20aa1082ce",
"MacAddress": "02:42:c0:a8:00:03",
"IPv4Address": "192.168.0.3/16",
"IPv6Address": ""
},
"63d51856fa9be41e0b5e3a790806facec19a945f3120fea58d3df3e7c6a02f0d": {
"Name": "tomcat-net1",
"EndpointID": "9b224ef5d6360a4f42701738e2258db6b2e1923a03386ea64c77a5be9466ce1f",
"MacAddress": "02:42:c0:a8:00:02",
"IPv4Address": "192.168.0.2/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]


docker network rm mynet #移除网络


#redis 集群部署测试
使用脚本创建六个redis配置

for port in $(seq 1 6); \
do \
mkdir -p /mydata/redis/node-${port}/conf
touch /mydata/redis/node-${port}/conf/redis.conf
cat << EOF >/mydata/redis/node-${port}/conf/redis.conf
port 6379
bind 0.0.0.0
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 172.38.0.1${port}
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
done

#通过后台启动redis服务1到6个节点

docker run -p 6371:6379 -p 16371:16379 --name redis-1 \
-v /mydata/redis/node-1/data:/data \
-v /mydata/redis/node-1/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.38.0.11 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf

docker run -p 6372:6379 -p 16372:16379 --name redis-2 \
-v /mydata/redis/node-2/data:/data \
-v /mydata/redis/node-2/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.38.0.12 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf

docker run -p 6373:6379 -p 16373:16379 --name redis-3 \
-v /mydata/redis/node-3/data:/data \
-v /mydata/redis/node-3/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.38.0.13 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf

docker run -p 6374:6379 -p 16374:16379 --name redis-4 \
-v /mydata/redis/node-4/data:/data \
-v /mydata/redis/node-4/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.38.0.14 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf

docker run -p 6375:6379 -p 16375:16379 --name redis-5 \
-v /mydata/redis/node-5/data:/data \
-v /mydata/redis/node-5/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.38.0.15 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf

docker run -p 6376:6379 -p 16376:16379 --name redis-6 \
-v /mydata/redis/node-6/data:/data \
-v /mydata/redis/node-6/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.38.0.16 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf

#创建集群的配置
redis-cli --cluster create 172.38.0.11:6379 172.38.0.12:6379 172.38.0.13:6379 172.38.0.14:6379 172.38.0.15:6379 172.38.0.16:6379 --cluster-replicas 1

 

posted on   syq_xx  阅读(251)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示