docker安装文档:Install Docker Engine on CentOS | Docker Documentationhttps://docs.docker.com/engine/install/centos/
测试是否安装成功
[root@kvm12-219 ~]# docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
卸载docker
#卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
#删除资源
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
阿里云镜像加速
-
登录阿里云,控制台->容器镜像服务->镜像加速器
-
修改daemon配置文件/etc/docker/daemon.json来使用加速器
#修改文件
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://d1etb7ew.mirror.aliyuncs.com"] #根据自己在阿里云获取的地址填写
}
EOF
#重启服务
sudo systemctl daemon-reload
sudo systemctl restart docker
docker常用命令
帮助命令
docker version #查看docker版本信息
docker info #查看docker详细信息,包括镜像和容器数量
docker 命令 --help #帮助命令
#帮助文档地址:https://docs.docker.com/reference/
镜像命令
#查看所有镜像
[root@kvm12-219 ~]# docker images -a
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 605c77e624dd 2 months ago 141MB
httpd latest ea28e1b82f31 3 months ago 143MB
......
#搜索镜像 docker search
[root@kvm12-219 ~]# docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 12253 [OK]
mariadb MariaDB Server is a high performing open sou… 4710 [OK]
......
#下载镜像 docker pull 镜像名称:tag tag默认latest
[root@kvm12-219 ~]# docker pull mysql
Using default tag: latest
......
[root@kvm12-219 ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
......
#删除指定镜像 docker rmi -f 镜像id(多个容器id之间用空格隔开)
[root@kvm12-219 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 c20987f18b13 2 months ago 448MB
mysql latest 3218b38490ce 2 months ago 516MB
[root@kvm12-219 ~]# docker rmi -f 3218b38490ce
Untagged: mysql:latest
Untagged: mysql@sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709
Deleted: sha256:3218b38490cec8d31976a40b92e09d61377359eab878db49f025e5d464367f3b
Deleted: sha256:aa81ca46575069829fe1b3c654d9e8feb43b4373932159fe2cad1ac13524a2f5
Deleted: sha256:0558823b9fbe967ea6d7174999be3cc9250b3423036370dc1a6888168cbd224d
Deleted: sha256:a46013db1d31231a0e1bac7eeda5ad4786dea0b1773927b45f92ea352a6d7ff9
Deleted: sha256:af161a47bb22852e9e3caf39f1dcd590b64bb8fae54315f9c2e7dc35b025e4e3
Deleted: sha256:feff1495e6982a7e91edc59b96ea74fd80e03674d92c7ec8a502b417268822ff
#删除全部镜像
docker rmi -f $(docker images -aq)
容器命令
有了镜像才可以创建容器
docker run [可选参数] image_id
# 参数说明
--name="Name" 容器名字,用来区分容器
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p(小写) 指定容器的端口 -p 8080:8080
-p 主机端口:容器端口(常用)
-p 容器端口
-P(大写) 随机指定端口
#启动并进入容器
[root@kvm12-219 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 5d0da3dc9764 6 months ago 231MB
[root@kvm12-219 ~]# docker run -it centos /bin/bash
[root@afa899e57939 /]#
#退出容器
[root@afa899e57939 /]# exit #exit直接容器停止并退出 退出后不停止容器(Ctrl + p + q)
exit
[root@kvm12-219 ~]#
#查看正在运行的容器
[root@kvm12-219 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
#查看所有容器
[root@kvm12-219 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
afa899e57939 centos "/bin/bash" 3 minutes ago Exited (0) About a minute ago pedantic_burnell
#列出所有容器id
[root@kvm12-219 ~]# docker ps -aq
afa899e57939
#删除容器
docker rm 容器id #删除指定容器,不能删除正在运行的容器,强制删除加 -f 参数
docker rm -f $(docker ps -aq) #删除所有容器
#启动和停止容器
docker start 容器id #启动容器
docker restart 容器id #重启容器
docker stop 容器id #停止当前正在运行的容器
docker kill 容器id #强制停止当前容器
常用的其他命令
后台启动容器
#docker run -d 镜像名
[root@kvm12-219 ~]# docker run -d centos
a5d1d9febaa882f9d7bf8d11b0c2298cae5f857d20fd641ac8bf9e4a6deca4ea
#问题docker ps ,发现centos停止了
#常见问题:docker容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止
查看日志
#docker logs --help #查看帮助文档
# docker logs [OPTIONS] CONTAINER
#创建一个容器并执行一个脚本,方便打印日志
[root@kvm12-219 ~]# docker run -d centos /bin/sh -c "while true;do echo hello;sleep 1;done"
40c169f5d898bf9f420d23bb603d6bb8f5d2ea13bc9fdb56f1e5daccfc2de53e
[root@kvm12-219 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
40c169f5d898 centos "/bin/sh -c 'while t…" 4 seconds ago Up 3 seconds great_snyder
#查看日志
[root@kvm12-219 ~]# docker logs -f -t --tail 10 40c169f5d898
2022-03-17T03:19:13.277457703Z hello
2022-03-17T03:19:14.283653436Z hello
2022-03-17T03:19:15.290146907Z hello
查看容器中的进程信息
#命令 :docker top 容器id
[root@kvm12-219 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5dce0b210df6 centos "/bin/sh -c 'while t…" 4 seconds ago Up 3 seconds heuristic_yalow
[root@kvm12-219 ~]# docker top 5dce0b210df6
UID PID PPID C STIME TTY TIME CMD
root 22214 22195 0 15:14 ? 00:00:00 /bin/sh -c while true;do echo hello;sleep 1;done
root 22452 22214 0 15:14 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
查看容器元数据
#命令 : docker inspect 容器id
[root@kvm12-219 ~]# docker inspect 5dce0b210df6
进入正在运行的容器
#方式一 :进入容器后开启一个新的终端,可以在里面操作
#命令:docker exec -it 容器id /bin/bash
[root@kvm12-219 ~]# docker exec -it 5dce0b210df6 /bin/bash
[root@5dce0b210df6 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@5dce0b210df6 /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 07:14 ? 00:00:00 /bin/sh -c while true;do echo hello;sleep 1;done
root 355 0 0 07:19 pts/0 00:00:00 /bin/bash
root 376 1 0 07:19 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
root 377 355 0 07:20 pts/0 00:00:00 ps -ef
#方式二 :进入容器正在执行的终端,不会启动新的进程
#命令:docker attach 容器id
[root@kvm12-219 ~]# docker attach 5dce0b210df6
从容器内拷贝文件到主机上
#命令:docker cp 容器id:容器内路径 目的主机路径
#进入容器
[root@kvm12-219 ~]# docker attach 879b5440c0a5
[root@879b5440c0a5 /]# cd /home
[root@879b5440c0a5 home]# ls
#创建测试文件
[root@879b5440c0a5 home]# touch test.docker
[root@879b5440c0a5 home]# ls
test.docker
#退出容器
[root@879b5440c0a5 home]# lsread escape sequence
[root@kvm12-219 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
879b5440c0a5 centos "/bin/bash" About a minute ago Up About a minute trusting_dijkstra
#拷贝文件到本地 /root目录
[root@kvm12-219 ~]# docker cp 879b5440c0a5:/home/test.docker /root
[root@kvm12-219 ~]# ls
test.docker
提交镜像
docker commit -m=提交的描述信息 -a=作者 容器id 目标镜像名:[tag]
练习
docker安装nginx
#下载nginx镜像
[root@kvm12-219 ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
a2abf6c4d29d: Pull complete
a9edb18cadd1: Pull complete
589b7251471a: Pull complete
186b1aaa4aa6: Pull complete
b4df32aa5a72: Pull complete
a0bcbecc962e: Pull complete
Digest: sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
[root@kvm12-219 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 605c77e624dd 2 months ago 141MB
centos latest 5d0da3dc9764 6 months ago 231MB
#后台运行nginx并命名为nginx01,端口映射为本机的3344端口
[root@kvm12-219 ~]# docker run -d --name nginx01 -p 3344:80 nginx
4c628cd4f538a812a3b9d1e246342977873fac8813f1852f2c50bd8bb0a85b55
[root@kvm12-219 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4c628cd4f538 nginx "/docker-entrypoint.…" 4 seconds ago Up 3 seconds 0.0.0.0:3344->80/tcp, :::3344->80/tcp nginx01
#访问nginx
[root@kvm12-219 ~]# curl localhost:3344
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
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>
#进入容器
[root@kvm12-219 ~]# docker exec -it nginx01 /bin/bash
root@4c628cd4f538:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
root@4c628cd4f538:/# cd /etc/nginx/
root@4c628cd4f538:/etc/nginx# ls
conf.d fastcgi_params mime.types modules nginx.conf scgi_params uwsgi_params
部署ES+Kibana
#下载并运行elasticsearch
[root@kvm12-219 ~]# docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2
[root@kvm12-219 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3814e7d79725 elasticsearch:7.6.2 "/usr/local/bin/dock…" 26 seconds ago Up 24 seconds 0.0.0.0:9200->9200/tcp, :::9200->9200/tcp, 0.0.0.0:9300->9300/tcp, :::9300->9300/tcp elasticsearch
[root@kvm12-219 ~]# curl localhost:9200
{
"name" : "3814e7d79725",
"cluster_name" : "docker-cluster",
"cluster_uuid" : "DwsgMO0XQ1eowL8EtK-wPw",
"version" : {
"number" : "7.6.2",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",
"build_date" : "2020-03-26T06:34:37.794943Z",
"build_snapshot" : false,
"lucene_version" : "8.4.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
#docker stats 容器id 可以查看容器所占服务器资源
#elasticsearch非常占内存,可以使用 -e参数增加内存限制
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m --Xmx512m"elasticsearch:7.6.2
思考:使用Kibana连接ES,网络如何才能连接过去?
可视化(prtainer)
Docker图形化界面管理工具,提供一个后台面板供我们操作
#安装并运行
docker run -d -p 9000:9000 \
-v /var/run/docker.sock:/var/run/docker.sock --restart=always --name prtainer portainer/portainer
访问:http://服务器IP:9000/ (设置密码后即可登录)
选择local ,点击connect即可进入管理本地docker页面
容器数据卷
容器之间可以有个数据共享技术,Docker容器中产生的数据,同步到本地,,这就是卷技术,目录地挂载,将容器内的目录挂载到Linux上面。
使用数据卷
方式一:直接使用命令挂载 -v
# docker run -it -v 主机目录:容器内目录
[root@kvm12-219 home]# pwd
/home
[root@kvm12-219 home]# ls
centos confluence mysftp mysql test
[root@kvm12-219 home]# docker run -it -v /home/ceshi:/home centos /bin/bash
[root@kvm12-219 home]# ls
centos ceshi confluence mysftp mysql test
#查看挂载详情
[root@kvm12-219 home]# docker inspect a845d28a00da
......
"Mounts": [
{
"Type": "bind",
"Source": "/home/ceshi",
"Destination": "/home",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
......
#运行MySQL5.7 数据持久化到本地
[root@kvm12-219 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 mysql01 mysql:5.7
参数说明:
-d :后台运行
-p :指定端口
-v :指定挂载路径
-e :修改环境配置
--name :指定容器名称
初识DockerFile
方式二:DockerFile挂载,dockerfile就是用来构建daocker镜像的构建文件,命令脚本,通过这个脚本可以生成镜像
#创建测试文件
[root@kvm12-219 ~]# cd /home/
[root@kvm12-219 home]# mkdir docker-test-volume
[root@kvm12-219 home]# cd docker-test-volume/
[root@kvm12-219 docker-test-volume]# vim dockerfile
# cat dockerfileFROM centos
VOLUME ["volume01","volume02"]
CMD echo "-----end-----"
CMD /bin/bash
#构建镜像
[root@kvm12-219 docker-test-volume]# docker build -f dockerfile -t zack/centos:1.0 .
[root@kvm12-219 docker-test-volume]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
zack/centos 1.0 eab442f032eb 10 seconds ago 231MB
#启动镜像
[root@kvm12-219 docker-test-volume]# docker run -it eab442f032eb
#查看挂载信息
[root@kvm12-219 docker-test-volume]# docker inspect eab442f032eb
DockerFile
dockerfile是用来构建docker镜像的文件,命令脚本
构建步骤:
-
编写一个dockerfile文件
-
docker build 构建镜像
-
docker run 运行镜像
-
docker push发布镜像(DockerHub、阿里云镜像仓库)
基础知识
-
每个保留关键字指令都是大写字母
-
执行从上到下顺序执行
-
#表示注释
-
每一个指令都会创建提交一个新的镜像层,并提交
dockerfie常用指令
FROM #基础镜像,一切从这里开始构建 MAINTAINER #镜像是谁写的,姓名+邮箱 RUN #镜像构建时需要运行的命令 ADD #copy文件,会自动压缩 WORKDIR #镜像的工作目录 VOLUME #设置卷,挂载主机目录 EXPOSE #指定对外的端口 CMD #指定容器启动时要运行的命令,只有最后一个生效,可被替代 ENTRYPOINT #指定容器启动时要运行的命令,可以追加命令 ONBUILD #当构建一个被继承的DockerFile 这个时候就会运行ONBUILD的指令,触发指令 COPY #复制,类似ADD命令,将文件拷贝到镜像中 ENV #构建镜像时设置环境变量
dockerhub(Docker Hub)上面每一个镜像都能查看相应的dockerfile文件,学习别人是如何创建dockerfile,例如centos:
FROM scratch
ADD centos-7-x86_64-docker.tar.xz /
LABEL \
org.label-schema.schema-version="1.0" \
org.label-schema.name="CentOS Base Image" \
org.label-schema.vendor="CentOS" \
org.label-schema.license="GPLv2" \
org.label-schema.build-date="20201113" \
org.opencontainers.image.title="CentOS Base Image" \
org.opencontainers.image.vendor="CentOS" \
org.opencontainers.image.licenses="GPL-2.0-only" \
org.opencontainers.image.created="2020-11-13 00:00:00+00:00"
CMD ["/bin/bash"]
dockerfile实战
Docker Hub中 99% 的镜像都是从 FROM scratch 这个基础镜像过来的!然后配置需要的软件和配置来进行构建 !
官方的centos没有vim,ifconfig等命令,创建一个自己的centos
在home目录下创建一个文件夹
[root@iz2zeaet7s13lfkc8r3e2kz home]# mkdir dockerfile
[root@iz2zeaet7s13lfkc8r3e2kz home]# ls
ceshi dockerfile docker-test-volume mysql www ysl
在创建的文件夹中创建dockerfile文件,并编写
[root@iz2zeaet7s13lfkc8r3e2kz dockerfile]# vim mydockerfile-centos
[root@iz2zeaet7s13lfkc8r3e2kz dockerfile]# cat mydockerfile-centos
FROM centos
MAINTAINER ysl<493487822@qq.com>
WORKDIR /usr/local
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo "---end---"
CMD /bin/bash
通过这个文件构建镜像
[root@iz2zeaet7s13lfkc8r3e2kz dockerfile]# docker build -f mydockerfile-centos -t mycentos:0.1 .
Sending build context to Docker daemon 2.048kB
Step 1/8 : FROM centos
---> 470671670cac
Step 2/8 : MAINTAINER ysl<493487822@qq.com>
---> Running in 2ce4c938a188
Removing intermediate container 2ce4c938a188
---> fd5e9920907d
Step 3/8 : WORKDIR /usr/local
---> Running in 98327d3050d5
Removing intermediate container 98327d3050d5
---> 167672c4b746
Step 4/8 : RUN yum -y install vim
---> Running in 7db13d6a1a95
CentOS-8 - AppStream 1.9 MB/s | 7.0 MB 00:03
CentOS-8 - Base 1.1 MB/s | 2.2 MB 00:02
CentOS-8 - Extras 7.1 kB/s | 5.9 kB 00:00
Dependencies resolved.
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
vim-enhanced x86_64 2:8.0.1763-13.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-13.el8 AppStream 6.3 M
vim-filesystem noarch 2:8.0.1763-13.el8 AppStream 48 k
which x86_64 2.21-10.el8 BaseOS 49 k
Transaction Summary
================================================================================
Install 5 Packages
Total download size: 7.8 M
Installed size: 31 M
Downloading Packages:
(1/5): gpm-libs-1.20.7-15.el8.x86_64.rpm 285 kB/s | 39 kB 00:00
(2/5): vim-filesystem-8.0.1763-13.el8.noarch.rp 813 kB/s | 48 kB 00:00
(3/5): which-2.21-10.el8.x86_64.rpm 294 kB/s | 49 kB 00:00
(4/5): vim-enhanced-8.0.1763-13.el8.x86_64.rpm 1.6 MB/s | 1.4 MB 00:00
(5/5): vim-common-8.0.1763-13.el8.x86_64.rpm 2.1 MB/s | 6.3 MB 00:03
--------------------------------------------------------------------------------
Total 1.3 MB/s | 7.8 MB 00:05
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-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-10.el8.x86_64 1/5
Installing : vim-filesystem-2:8.0.1763-13.el8.noarch 2/5
Installing : vim-common-2:8.0.1763-13.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-13.el8.x86_64 5/5
Running scriptlet: vim-enhanced-2:8.0.1763-13.el8.x86_64 5/5
Running scriptlet: vim-common-2:8.0.1763-13.el8.x86_64 5/5
Verifying : gpm-libs-1.20.7-15.el8.x86_64 1/5
Verifying : vim-common-2:8.0.1763-13.el8.x86_64 2/5
Verifying : vim-enhanced-2:8.0.1763-13.el8.x86_64 3/5
Verifying : vim-filesystem-2:8.0.1763-13.el8.noarch 4/5
Verifying : which-2.21-10.el8.x86_64 5/5
Installed:
vim-enhanced-2:8.0.1763-13.el8.x86_64 gpm-libs-1.20.7-15.el8.x86_64
vim-common-2:8.0.1763-13.el8.x86_64 vim-filesystem-2:8.0.1763-13.el8.noarch
which-2.21-10.el8.x86_64
Complete!
Removing intermediate container 7db13d6a1a95
---> 46d4742d96c6
Step 5/8 : RUN yum -y install net-tools
---> Running in 3a8b3b61455f
Last metadata expiration check: 0:00:14 ago on Tue May 26 02:28:01 2020.
Dependencies resolved.
================================================================================
Package Architecture Version Repository Size
================================================================================
Installing:
net-tools x86_64 2.0-0.51.20160912git.el8 BaseOS 323 k
Transaction Summary
================================================================================
Install 1 Package
Total download size: 323 k
Installed size: 1.0 M
Downloading Packages:
net-tools-2.0-0.51.20160912git.el8.x86_64.rpm 2.0 MB/s | 323 kB 00:00
--------------------------------------------------------------------------------
Total 211 kB/s | 323 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.51.20160912git.el8.x86_64 1/1
Running scriptlet: net-tools-2.0-0.51.20160912git.el8.x86_64 1/1
Verifying : net-tools-2.0-0.51.20160912git.el8.x86_64 1/1
Installed:
net-tools-2.0-0.51.20160912git.el8.x86_64
Complete!
Removing intermediate container 3a8b3b61455f
---> 0a0a8b5370f2
Step 6/8 : EXPOSE 80
---> Running in e136862cbcf1
Removing intermediate container e136862cbcf1
---> 28b29770c09a
Step 7/8 : CMD echo "---end---"
---> Running in db998e281478
Removing intermediate container db998e281478
---> e7090ba90a77
Step 8/8 : CMD /bin/bash
---> Running in 291bec834681
Removing intermediate container 291bec834681
---> a68a7a44878e
Successfully built a68a7a44878e
Successfully tagged mycentos:0.1
[root@iz2zeaet7s13lfkc8r3e2kz dockerfile]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mycentos 0.1 a68a7a44878e About a minute ago 321MB
ysl/centos 1.0 bf97aef123f3 23 hours ago 237MB
mysql 5.7 a4fdfd462add 4 days ago 448MB
nginx latest 9beeba249f3e 10 days ago 127MB
centos latest 470671670cac 4 months ago 237MB
运行
[root@iz2zeaet7s13lfkc8r3e2kz dockerfile]# docker run -it mycentos:0.1
[root@49326d559289 local]# pwd
/usr/local
官方的工作目录是 / ,不能使用vim,和ifconfig等命令!我自己的镜像安装了vim,和ifconfig!测试能否使用
docker网络
#查看当前docker网络
[root@iz2zeaet7s13lfkc8r3e2kz ysl]# docker network ls
NETWORK ID NAME DRIVER SCOPE
8ce5d63292ee bridge bridge local
b01be88b9d12 host host local
54b9e50084dd none null local
网络模式
bridge :桥接 docker(默认)
host :和宿主机共享网络
none :不配置网络
container:容器网络连通(用的少!局限很大!)
自定义网络
#自定义网络
[root@iz2zeaet7s13lfkc8r3e2kz ysl]# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
ce6c831fa98c8e809096eb37b682abf1ce9b541d73b75f4c7126dfe8748c5971
[root@iz2zeaet7s13lfkc8r3e2kz ysl]# docker network ls
NETWORK ID NAME DRIVER SCOPE
8ce5d63292ee bridge bridge local
b01be88b9d12 host host local
ce6c831fa98c mynet bridge local
54b9e50084dd none null local
# 查看信息
[root@iz2zeaet7s13lfkc8r3e2kz ysl]# docker network inspect mynet
[
{
"Name": "mynet",
"Id": "ce6c831fa98c8e809096eb37b682abf1ce9b541d73b75f4c7126dfe8748c5971",
"Created": "2020-05-27T16:30:22.691575681+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": {}
}
]
# 用自己的网络启动容器,同一个网络下的容器之间可以互相通过IP或者docker名字ping通
[root@iz2zeaet7s13lfkc8r3e2kz ysl]# docker run -d -P --name tomcat-net-01 --net mynet tomcat
0dcb6a5f014415cb6c98c93c9dac21b7f5cae21df5cc5e42f331cc6e07a1ec93
[root@iz2zeaet7s13lfkc8r3e2kz ysl]# docker run -d -P --name tomcat-net-02 --net mynet tomcat
eec65d6dc9cdad33f85d3874fcf8291ed46c97893ae1298c7d23d9d85e7dda87
同网络下ping测试
#在默认网络下启动容器
[root@iz2zeaet7s13lfkc8r3e2kz ysl]# docker run -d -P --name tomcat01
不同网络下ping猜测试
# 测试打通 tomcat01 - mynet
[root@iz2zeaet7s13lfkc8r3e2kz ysl]# docker network connect mynet tomcat01
# 看一下网络信息,这个网络下已经多了一个tomcat01
docker network inspect mynet
再次ping,可以ping通
实战:docker部署redis集群
架构思路:分片+高可用+负载均衡,启动三台r-m主redis,当有一台挂了,从redis可以变成主redis。
# 创建网卡
docker network create --driver bridge --subnet 172.38.0.0/16 --gateway 172.38.0.1 redis
# 创建六个redis
#脚本创建创建6个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
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
# 启动第二个redis
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
# 剩余依次启动
# 进入容器
[root@iz2zeaet7s13lfkc8r3e2kz home]# docker exec -it redis-1 /bin/sh
/data # ls
appendonly.aof nodes.conf
/data #
# 创建集群
/data # 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
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 172.38.0.15:6379 to 172.38.0.11:6379
Adding replica 172.38.0.16:6379 to 172.38.0.12:6379
Adding replica 172.38.0.14:6379 to 172.38.0.13:6379
M: f8b07c2dc2cbf74d9939fe62948a8e230f9de319 172.38.0.11:6379
slots:[0-5460] (5461 slots) master
M: fa4395001194f42d4b72252f47c9e6fea1e0cda3 172.38.0.12:6379
slots:[5461-10922] (5462 slots) master
M: b744ebd8a33916992fc5f8161ac9efdf4fe1cdcf 172.38.0.13:6379
slots:[10923-16383] (5461 slots) master
S: 1ad42e97941bc58f6234c711d5619029ef642696 172.38.0.14:6379
replicates b744ebd8a33916992fc5f8161ac9efdf4fe1cdcf
S: f96de63ed0a6f75774c1d99f281ca3f001d37932 172.38.0.15:6379
replicates f8b07c2dc2cbf74d9939fe62948a8e230f9de319
S: 1e6deeeeccaa0d80caa73fb91b0442849c0356da 172.38.0.16:6379
replicates fa4395001194f42d4b72252f47c9e6fea1e0cda3
Can I set the above configuration? (type 'yes' to accept): yes #输入yes
# 链接
/data # redis-cli -c
127.0.0.1:6379> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:339
cluster_stats_messages_pong_sent:327
cluster_stats_messages_sent:666
cluster_stats_messages_ping_received:322
cluster_stats_messages_pong_received:339
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:666
127.0.0.1:6379> cluster nodes
fa4395001194f42d4b72252f47c9e6fea1e0cda3 172.38.0.12:6379@16379 master - 0 1590634161065 2 connected 5461-10922
b744ebd8a33916992fc5f8161ac9efdf4fe1cdcf 172.38.0.13:6379@16379 master - 0 1590634161000 3 connected 10923-16383
f96de63ed0a6f75774c1d99f281ca3f001d37932 172.38.0.15:6379@16379 slave f8b07c2dc2cbf74d9939fe62948a8e230f9de319 0 1590634161567 5 connected
f8b07c2dc2cbf74d9939fe62948a8e230f9de319 172.38.0.11:6379@16379 myself,master - 0 1590634160000 1 connected 0-5460
1ad42e97941bc58f6234c711d5619029ef642696 172.38.0.14:6379@16379 slave b744ebd8a33916992fc5f8161ac9efdf4fe1cdcf 0 1590634159562 4 connected
1e6deeeeccaa0d80caa73fb91b0442849c0356da 172.38.0.16:6379@16379 slave fa4395001194f42d4b72252f47c9e6fea1e0cda3 0 1590634160000 6 connected
# 现在有三个主机master 三个从机slave
测试,set一个值
发现处理的是 12 ,吧 12 的这个容器关掉
再去get这个值,看看能不能取到
发现 这个值是在16 get到的,16 本是从机,12停掉后16就变为了主机
完成。