[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7ZjnOFoo-1654088141765)(C:/Users/hasee/AppData/Roaming/Typora/typora-user-images/image-20210128162439879.png)]
Docker安装-
卸载旧版本
yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
-
安装需要的软件包
yum install -y yum-utils
-
设置镜像仓库
# 正确推荐使用国内的 yum-config-manager --add-repo http://mirrors.aliyun.com/docker- ce/linux/centos/docker-ce.repo
-
更新yum软件包索引
yum makecache fast
-
安装 Docker CE
yum install docker-ce docker-ce-cli containerd.io
-
启动 Docker
systemctl start docker
-
测试命令
docker version docker run hello-world docker images
# 首先开启docker开机自启动 systemctl enable docker # 开启后我们找到想要自动重启的容器名 ###################### docker update 容器名 --restart=always ############################ #例如我想要redis在docker启动时就启动 docker update redis --restart=always docker update mysql --restart=alwaysDocker常用命令 帮助命令
docker version # 显示 Docker 版本信息。 docker info # 显示 Docker 系统信息,包括镜像和容器数。 docker --help # 帮助镜像命令
docker images
# 列出本地主机上的镜像 [root@kuangshen ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest bf756fb1ae65 12 months ago 13.3kB # 解释 REPOSITORY 镜像的仓库源 TAG 镜像的标签 IMAGE ID 镜像的ID CREATED 镜像创建时间 SIZE 镜像大小 # 同一个仓库源可以有多个 TAG,代表这个仓库源的不同版本,我们使用REPOSITORY:TAG 定义不同 的镜像,如果你不定义镜像的标签版本,docker将默认使用 lastest 镜像! # 可选项 -a: 列出本地所有镜像 -q: 只显示镜像id --digests: 显示镜像的摘要信息
docker search
# 搜索镜像 [root@kuangshen ~]# docker search mysql # docker search 某个镜像的名称 对应DockerHub仓库中的镜像 # 可选项 --filter=stars=50 : 列出收藏数不小于指定值的镜像。
docker pull
# 下载镜像 [root@dragon ~]# docker pull mysql Using default tag: latest # 不写tag,默认是latest latest: Pulling from library/mysql a076a628af6f: Pull complete # 分层下载 f6c208f3f991: Pull complete 88a9455a9165: Pull complete 406c9b8427c6: Pull complete 7c88599c0b25: Pull complete 25b5c6debdaf: Pull complete 43a5816f1617: Pull complete 1a8c919e89bf: Pull complete 9f3cf4bd1a07: Pull complete 80539cea118d: Pull complete 201b3cad54ce: Pull complete 944ba37e1c06: Pull complete Digest: sha256:feada149cb8ff54eade1336da7c1d080c4a1c7ed82b5e320efb5beebed85ae8c # 签名 Status: Downloaded newer image for mysql:latest docker.io/library/mysql:latest # 真实位置 # 指定版本下载 [root@dragon ~]# docker pull mysql:5.7
docker rmi
# 删除镜像 [root@dragon ~]# docker rmi -f $(docker images -aq) # 删除全部 docker rmi -f 镜像id # 删除单个 docker rmi -f 镜像名:tag 镜像名:tag # 删除多个容器命令
mysql redis运行
# mysql 容器运行 docker run -p 3306:3306 --name mysql -v /mydata/mysql/log:/var/log/mysql -v /mydata/mysql/data:/var/lib/mysql -v /mydata/mysql/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7 # conf配置 [client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] init_connect='SET collation_connection = utf8_unicode_ci' init_connect='SET NAMES utf8' character-set-server=utf8mb4 collation-server=utf8_unicode_ci skip-character-set-client-handshake skip-name-resolve # reids 容器运行 docker run -p 6379:6379 --name redis -v /mydata/redis/data:/data -v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf -d redis redis-server /etc/redis/redis.conf
说明:有镜像才能创建容器,我们这里使用 centos 的镜像来测试,就是虚拟一个 centos !
docker pull centos
新建容器并启动
# 命令 docker run [可选参数] IMAGE [COMMAND][ARG...] # 常用参数说明 --name="Name" # 给容器指定一个名字 -d # 后台方式运行容器,并返回容器的id! -i # 以交互模式运行容器,通过和 -t 一起使用 -t # 给容器重新分配一个终端,通常和 -i 一起使用 -P # 随机端口映射(大写) -p # 指定端口映射(小结),一般可以有四种写法 ip:hostPort:containerPort ip::containerPort hostPort:containerPort (常用) containerPort [root@dragon ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos latest 300e315adb2f 6 weeks ago 209MB # 使用centos进行用交互模式启动容器,在容器内执行/bin/bash命令! [root@dragon ~]# docker run -it centos /bin/bash [root@6ef6d82e83ee /]# ls # 显示容器内部目录 bin etc lib lost+found mnt proc run srv tmp var dev home lib64 media opt root sbin sys usr [root@6ef6d82e83ee /]# exit # 退出容器 exit # 查看所有正在运行的容器 [root@dragon ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES # 常用参数说明 -a # 列出当前所有正在运行的容器 + 历史运行过的容器 -l # 显示最近创建的容器 -n=? # 显示最近n个创建的容器 -q # 静默模式,只显示容器编号。 exit # 容器停止退出 ctrl+P+Q # 容器不停止退出 # 启动停止容器 docker start (容器id or 容器名) # 启动容器 docker restart (容器id or 容器名) # 重启容器 docker stop (容器id or 容器名) # 停止容器 docker kill (容器id or 容器名) # 强制停止容器 # 删除容器 docker rm 容器id # 删除指定容器 docker rm -f $(docker ps -a -q) # 删除所有容器 docker ps -a -q|xargs docker rm # 删除所有容器常用其他命令
后台启动容器
# 命令 docker run -d 容器名 # 例子 docker run -d centos # 启动centos,使用后台方式启动 # 问题: 使用docker ps 查看,发现容器已经退出了! # 解释:Docker容器后台运行,就必须有一个前台进程,容器运行的命令如果不是那些一直挂起的命 令,就会自动退出。 # 比如,你运行了nginx服务,但是docker前台没有运行应用,这种情况下,容器启动后,会立即自 杀,因为他觉得没有程序了,所以最好的情况是,将你的应用使用前台进程的方式运行启动。
查看日志
# 命令 docker logs -f -t --tail 容器id # 例子:我们启动 centos,并编写一段脚本来测试玩玩!最后查看日志 [root@kuangshen ~]# docker run -d centos /bin/sh -c "while true;do echo kuangshen;sleep 1;done" # -t 显示时间戳 # -f 打印最新的日志 # --tail 数字 显示多少条! [root@kuangshen ~]# docker logs -tf --tail 10 c8530dbbe3b4
查看容器中运行的进程信息,支持 ps 命令参数。
# 命令 docker top 容器id # 测试 [root@kuangshen ~]# docker top c8530dbbe3b4 UID PID PPID C STIME TTY TIME CMD root 27437 27421 0 16:43 ? 00:00:00 /bin/sh -c ....
查看容器/镜像的元数据
# 命令 docker inspect 容器id # 测试 [root@kuangshen ~]# docker inspect c8530dbbe3b4
进入正在运行的容器
# 命令1 docker exec -it 容器id bashShell # exec 是在容器中打开新的终端,并且可以启动新的进程 # 命令2 docker attach 容器id # attach 直接进入容器,不会启动新的进程
从容器内拷贝文件到主机上
# 命令 docker cp 容器id:容器内路径 目的主机路径 # 测试 [root@dragon ~]# docker attach bfdac335ab04 # 进入容器 # 容器内执行,创建一个文件测试 [root@bfdac335ab04 /]# cd /home [root@bfdac335ab04 home]# touch test.java [root@bfdac335ab04 home]# ls test.java [root@bfdac335ab04 home]# exit exit # linux复制查看,是否复制成功 [root@dragon /]# docker cp bfdac335ab04:/home/test.java /home [root@dragon /]# cd home [root@dragon home]# ls admin test.java www小结
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6Jcglv8V-1654088141768)(C:/Users/hasee/AppData/Roaming/Typora/typora-user-images/image-20210122134035554.png)]
作者:慕_女神
链接:https://www.imooc.com/article/308172
来源:慕课网
# 下载tomcat docker pull tomcat # 启动运行 -d 后台运行 docker run -d -p 8080:8080 --name tomcat9 tamcat # 进入tomcat docker exec -it tomcat9 /bin/bash # 访问网页发现问题,没有webapps,阿里云镜像的原因。默认是最小的镜像,所有不必要的都剔除掉。 # 所以我们需要把webapps.dist中的内容cp到webapps中 cp -r webapps.dist*** 安装MySql,同步数据# 安装镜像 [root@dragon ~]# docker pull mysql:5.7 # 安装启动mysql,需要设置密码的 # 官方测试 $ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag # 运行容器,做数据挂载! -d 后台运行 -p 端口映射 -v 卷挂载 -e 环境配置 --name 容器姓名 [root@dragon ~]# docker run -d -p 3344:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=1234 --name mysql01 mysql:5.7 # 启动成功后,用本地sqlyog测试连接。 # sqlyog - 连接到服务器的3344 ---- 3344 和容器内的 3306 映射,这时候我们就可以连接上了。假设将我们的容器删除,发现挂载到本地的数据卷依旧没有丢失,这就实现了容器数据持久化功能!
初识DockerFileDockerFile:是用来构建docker镜像的构建文件!命令脚本!
通过这个脚本就能生成镜像,镜像是一层一层的,脚本一个个的命令,每个命令都是一层!
# 创建一个dockerfile文件,名字可以随便写,建议是dockerfile # 文件中的内容 指令大写 FROM centos VOLUME ["volume01","volume02"] CMD echo "--------end--------" CMD /bin/bash # 这里的每个命令就是一层镜像[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n9zKogZY-1654088141772)(C:/Users/hasee/AppData/Roaming/Typora/typora-user-images/image-20210125195014347.png)]
生成的镜像
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xDgK32Rp-1654088141772)(C:/Users/hasee/AppData/Roaming/Typora/typora-user-images/image-20210125195040569.png)]
启动我们自己的容器
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lT5iN81U-1654088141773)(C:/Users/hasee/AppData/Roaming/Typora/typora-user-images/image-20210125195313191.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PvFAN35B-1654088141773)(C:/Users/hasee/AppData/Roaming/Typora/typora-user-images/image-20210125195428876.png)]
这个卷和外部一定有一个同步目录
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JQqmo7dc-1654088141774)(C:/Users/hasee/AppData/Roaming/Typora/typora-user-images/image-20210125195856646.png)]
查看卷的挂载目录
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rxP6Z90B-1654088141775)(C:/Users/hasee/AppData/Roaming/Typora/typora-user-images/image-20210125195950924.png)]
测试这个文件是否同步出去了,在其中一个上边创建一个文件
这种方式我们使用的是十分多的,因为我们通常会构建自己的镜像。
加是构建镜像时候没有挂载卷,就要手动挂载 -v 卷名:容器内路径!
数据卷容器同步docker run -it --name docker02 --volumes-from docker01 dragon/centos[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XppNuAQT-1654088141776)(C:/Users/hasee/AppData/Roaming/Typora/typora-user-images/image-20210125201410722.png)]
分别启动两个容器,进行挂载,测试。
也可以多个容器挂载其中一个容器,如果删除主容器,那么其他容器的共享内容不会消失。
文件是拷贝过去的,而不是在线共享的,所有当一个容器宕机了,也不影响其他容器的文件。
多个Mysql实现数据同步
[root@dragon ~]# docker run -d -p 3344:3306 -v /etc/mysql/conf.d -v /var/lib/mysql -e MYSQL_ROOT_PASSWORD=1234 --name mysql01 mysql:5.7 [root@dragon ~]# docker run -d -p 3344:3306 -e MYSQL_ROOT_PASSWORD=1234 --name mysql02 --volumes-from mysql01 mysql:5.7 # 这样就可以实现两个MySQL数据共享了DockerFile DockerFile介绍dockerfile 是用来构建docker镜像的文件!命令参数脚本!
构建步骤:
- 编写一个 dockerfile 文件
- docker build 构建成一个镜像
- docker run 运行镜像
- docker push 发布镜像(DockerHub、阿里云镜像仓库!)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VdfwaJvH-1654088141777)(C:/Users/hasee/AppData/Roaming/Typora/typora-user-images/image-20210125203124252.png)]
很多官方的镜像都是基础包,很多功能都没有,我们通常会自己搭建镜像!
DockerFile构建过程基础知识:
- 每个保留关键之都必须是大写字母
- 执行从上到下顺序执行
- #表示注释
- 每一个指令都会创建提交一个新的镜像层,并提交!
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rV1lr0GK-1654088141778)(C:/Users/hasee/AppData/Roaming/Typora/typora-user-images/image-20210125203706609.png)]
DockerFile指令FROM # 基础镜像,一切从这里开始构建 MAINTAINER # 镜像是谁写的,姓名 + 邮箱 RUN # 镜像构建的时候需要运行的命令 ADD # 步骤:tomcat 镜像,这个tomcat压缩包!添加内容 WORKDIR # 镜像的工作目录 VOLUME # 挂载的目录 EXPOSE # 保留端口配置 CMD # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代 ENTRYPOINT # 指定这个容器启动的时候要运行的命令,可以追加命令 ONBUILD # 当构建一个被继承 DockerFile 这个时候就会运行 ONBUILD 的指令,触发命令 COPY # 类似ADD,将我们文件拷贝到镜像 ENV # 构建的时候设置环境变量![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OWgZSD95-1654088141779)(C:/Users/hasee/AppData/Roaming/Typora/typora-user-images/image-20210125204206806.png)]
ENTRYPOINT 和 CMD 的区别
构建两个镜像
# ENTRYPOINT FROM centos ENTRYPOINT ["ls","-a"] # 构建镜像 docker build -f dockerfile-cmd-entrypoint -t cmdentrypoint . # 运行 docker run cmdentrypoint # CMD FROM centos CMD ["ls","-a"] # 构建镜像 docker build -f dockerfile-cmd-test -t cmdtest . # 运行 docker run cmdtest两个都是运行后直接ls -a 展示列表
但是cmd在运行时无法追加操作,而ENTRYPOINT可以追加操作。
CMD
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZHbikZiZ-1654088141779)(C:/Users/hasee/AppData/Roaming/Typora/typora-user-images/image-20210125212123368.png)]
ENTRYPOINT
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c1iKtZzP-1654088141780)(C:/Users/hasee/AppData/Roaming/Typora/typora-user-images/image-20210125212158560.png)]
实战:自定义镜像 tomcat1、 mkdir tycoon/build/tomcat
2、在上述目录下 touch readme.txt
3、将 JDK 和 tomcat 安装的压缩包拷贝进上一步目录
4、在 tycoon/build/tomcat 目录下新建一个Dockerfile文件
# vim Dockerfile FROM centos MAINTAINER tycoonbo<2390721223@qq.com> #把宿主机当前上下文的read.txt拷贝到容器/usr/local/路径下 COPY readme.txt /usr/local/readme.txt #把java与tomcat添加到容器中 ADD jdk-8u281-linux-x64.tar.gz /usr/local/ ADD apache-tomcat-9.0.40.tar.gz /usr/local/ #安装vim编辑器 RUN yum -y install vim #设置工作访问时候的WORKDIR路径,登录落脚点 ENV MYPATH /usr/local/ WORKDIR $MYPATH #配置java与tomcat环境变量 ENV JAVA_HOME /usr/local/jdk1.8.0_281 ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.40 ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.40 ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin #容器运行时监听的端口 EXPOSE 8080 #启动时运行tomcat CMD /usr/local/apache-tomcat-9.0.40/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.40/bin/logs/catalina.out5、构建镜像
[root@dragon tomcat]# docker build -t diytomcat . ..... Successfully built ffdf6529937d Successfully tagged diytomcat:latest # 构建完成 [root@dragon tomcat]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE diytomcat latest c218a398e667 About a minute ago 640MB dragon/centos latest e854087a8ff8 18 hours ago 209MB6、运行启动 run
[root@dragon tomcat]# docker run -d -p 8088:8080 --name tycoontomcat -v /home/tycoon/build/tomcat/test:/usr/local/apache-tomcat-9.0.40/webapps/test -v /home/tycoon/build/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.40/logs diytomcat 9b8362277ba9ee903de0f9d6ac726eab804f2a4f43f4ea8de8851b2d0ff5d913[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ukxjsmG2-1654088141781)(C:/Users/hasee/AppData/Roaming/Typora/typora-user-images/image-20210126140204527.png)]
7、验证测试访问! 网页访问 39.102.33.216:8088
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gYrWc8X9-1654088141782)(C:/Users/hasee/AppData/Roaming/Typora/typora-user-images/image-20210126140410958.png)]
8、发布项目(由于做了卷挂载,所以直接在本地test文件下发布就OK!)
web.xml
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>hello,tycoonbo -----------welcome------------ <%=" my docker tomcat,tycoonbo666 "%>
<% System.out.println("-------my docker tomcat-------");%>测试
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B7M5xKWA-1654088141782)(C:/Users/hasee/AppData/Roaming/Typora/typora-user-images/image-20210126142641655.png)]
# 查看日志 [root@dragon tomcat]# cd tomcatlogs/ [root@dragon tomcatlogs]# ls catalina.2021-01-26.log host-manager.2021-01-26.log localhost_access_log.2021-01-26.txt catalina.out localhost.2021-01-26.log manager.2021-01-26.log [root@dragon tomcatlogs]# cat catalina.out ......... -------my docker tomcat------- # 搞定发布自己的镜像 上传DockerHub1、注册DockerHub
2、在xshell中登录DockerHub
[root@dragon tomcatlogs]# docker login --help Usage: docker login [OPTIONS] [SERVER] Log in to a Docker registry. If no server is specified, the default is defined by the daemon. Options: -p, --password string Password --password-stdin Take the password from stdin -u, --username string Username # 登录成功 [root@dragon tomcatlogs]# docker login -u tycoonbo 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 # 成功提示3、登录完毕后,push镜像
# push自己的镜像到服务器上! [root@dragon /]# docker tag diytomcat tycoonbo/diytomcat:1.0 [root@dragon /]# docker push tycoonbo/diytomcat:1.0上传阿里云镜像1、登录阿里云,找到容器镜像服务
2、创建命名空间
3、创建容器镜像
4、查看镜像仓库
教你xshell登录
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mCbNOXgj-1654088141783)(C:/Users/hasee/AppData/Roaming/Typora/typora-user-images/image-20210126151646226.png)]
# 登录 [root@dragon /]# docker login --username=社会你博哥dragon registry.cn-beijing.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 # 设置 tag [root@dragon /]# docker tag c218a398e667 registry.cn-beijing.aliyuncs.com/tycoonbo-images/tycoonbo-test:1.0 # push到阿里云 [root@dragon /]# docker push registry.cn-beijing.aliyuncs.com/tycoonbo-images/tycoonbo-test:1.0小结[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QJwJxsjs-1654088141784)(C:/Users/hasee/AppData/Roaming/Typora/typora-user-images/image-20210126152604246.png)]
Docker 网络 理解docker0清空所有镜像
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hlt1bGNp-1654088141784)(C:/Users/hasee/AppData/Roaming/Typora/typora-user-images/image-20210126153505177.png)]
实战:部署redis集群# 创建网卡 docker network create redis --subnet 172.38.0.0/16 # 通过脚本创建六个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 # 启动6个容器 docker run -p 6378: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,注意这里是 sh命令 docker exec -it redis-1 /bin/sh # 创建集群 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 # 连接集群 redis-cli -c # 查看集群信息 cluster info # 查看节点 cluster nodes # set a b # 停止到存值的容器 # 然后再次get a,发现依旧可以获取值 # 查看节点,发现高可用完全没问题SpringBoot微服务打包Docker镜像Docker Compose 简介
- 构建springboot项目
- 打包应用
- 编写Dockerfile
- 构建镜像
- 发布运行!
定义、运行多个容器。 YAML file 配置文件
三步骤:
- Dockerfile保证我们的项目,可以在任何地方运行。
- service服务,docker-compose.yml 文件
- 启动 docker-compose up
作用:批量容器编排!
Compose 是 docker的开源项目。需要安装!
dockerfile 让程序在任何地方运行。
Compose :概念
- 服务service:容器,应用。
- 项目project:一组相关的容器。
1、下载
curl -L https://get.daocloud.io/docker/compose/releases/download/1.28.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
2、授权
sudo chmod +x /usr/local/bin/docker-compose体验
- 应用 app.py
- Dockerfile 应用打包为镜像
- Docker-compose yaml 文件(定义整个服务,需要的环境。web、redis) 完整上线服务!
- 启动compose 项目 (docker-compose up)
docker-compose.yml核心
# 3层! version:'' #版本 services: # 服务 服务1: web # 服务配置 images build network ..... 服务2: redis .... 服务3: redis # 其他配置 网络/卷、全局规则 volumes: networks: configs:Docker Docker概述
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NvTXZFie-1654088143144)(C:/Users/hasee/AppData/Roaming/Typora/typora-user-images/image-20210128162439879.png)]
Docker安装-
卸载旧版本
yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
-
安装需要的软件包
yum install -y yum-utils
-
设置镜像仓库
# 正确推荐使用国内的 yum-config-manager --add-repo http://mirrors.aliyun.com/docker- ce/linux/centos/docker-ce.repo
-
更新yum软件包索引
yum makecache fast
-
安装 Docker CE
yum install docker-ce docker-ce-cli containerd.io
-
启动 Docker
systemctl start docker
-
测试命令
docker version docker run hello-world docker images
# 首先开启docker开机自启动 systemctl enable docker # 开启后我们找到想要自动重启的容器名 ###################### docker update 容器名 --restart=always ############################ #例如我想要redis在docker启动时就启动 docker update redis --restart=always docker update mysql --restart=alwaysDocker常用命令 帮助命令
docker version # 显示 Docker 版本信息。 docker info # 显示 Docker 系统信息,包括镜像和容器数。 docker --help # 帮助镜像命令
docker images
# 列出本地主机上的镜像 [root@kuangshen ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest bf756fb1ae65 12 months ago 13.3kB # 解释 REPOSITORY 镜像的仓库源 TAG 镜像的标签 IMAGE ID 镜像的ID CREATED 镜像创建时间 SIZE 镜像大小 # 同一个仓库源可以有多个 TAG,代表这个仓库源的不同版本,我们使用REPOSITORY:TAG 定义不同 的镜像,如果你不定义镜像的标签版本,docker将默认使用 lastest 镜像! # 可选项 -a: 列出本地所有镜像 -q: 只显示镜像id --digests: 显示镜像的摘要信息
docker search
# 搜索镜像 [root@kuangshen ~]# docker search mysql # docker search 某个镜像的名称 对应DockerHub仓库中的镜像 # 可选项 --filter=stars=50 : 列出收藏数不小于指定值的镜像。
docker pull
# 下载镜像 [root@dragon ~]# docker pull mysql Using default tag: latest # 不写tag,默认是latest latest: Pulling from library/mysql a076a628af6f: Pull complete # 分层下载 f6c208f3f991: Pull complete 88a9455a9165: Pull complete 406c9b8427c6: Pull complete 7c88599c0b25: Pull complete 25b5c6debdaf: Pull complete 43a5816f1617: Pull complete 1a8c919e89bf: Pull complete 9f3cf4bd1a07: Pull complete 80539cea118d: Pull complete 201b3cad54ce: Pull complete 944ba37e1c06: Pull complete Digest: sha256:feada149cb8ff54eade1336da7c1d080c4a1c7ed82b5e320efb5beebed85ae8c # 签名 Status: Downloaded newer image for mysql:latest docker.io/library/mysql:latest # 真实位置 # 指定版本下载 [root@dragon ~]# docker pull mysql:5.7
docker rmi
# 删除镜像 [root@dragon ~]# docker rmi -f $(docker images -aq) # 删除全部 docker rmi -f 镜像id # 删除单个 docker rmi -f 镜像名:tag 镜像名:tag # 删除多个容器命令
mysql redis运行
# mysql 容器运行 docker run -p 3306:3306 --name mysql -v /mydata/mysql/log:/var/log/mysql -v /mydata/mysql/data:/var/lib/mysql -v /mydata/mysql/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7 # conf配置 [client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] init_connect='SET collation_connection = utf8_unicode_ci' init_connect='SET NAMES utf8' character-set-server=utf8mb4 collation-server=utf8_unicode_ci skip-character-set-client-handshake skip-name-resolve # reids 容器运行 docker run -p 6379:6379 --name redis -v /mydata/redis/data:/data -v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf -d redis redis-server /etc/redis/redis.conf
说明:有镜像才能创建容器,我们这里使用 centos 的镜像来测试,就是虚拟一个 centos !
docker pull centos
新建容器并启动
# 命令 docker run [可选参数] IMAGE [COMMAND][ARG...] # 常用参数说明 --name="Name" # 给容器指定一个名字 -d # 后台方式运行容器,并返回容器的id! -i # 以交互模式运行容器,通过和 -t 一起使用 -t # 给容器重新分配一个终端,通常和 -i 一起使用 -P # 随机端口映射(大写) -p # 指定端口映射(小结),一般可以有四种写法 ip:hostPort:containerPort ip::containerPort hostPort:containerPort (常用) containerPort [root@dragon ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos latest 300e315adb2f 6 weeks ago 209MB # 使用centos进行用交互模式启动容器,在容器内执行/bin/bash命令! [root@dragon ~]# docker run -it centos /bin/bash [root@6ef6d82e83ee /]# ls # 显示容器内部目录 bin etc lib lost+found mnt proc run srv tmp var dev home lib64 media opt root sbin sys usr [root@6ef6d82e83ee /]# exit # 退出容器 exit # 查看所有正在运行的容器 [root@dragon ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES # 常用参数说明 -a # 列出当前所有正在运行的容器 + 历史运行过的容器 -l # 显示最近创建的容器 -n=? # 显示最近n个创建的容器 -q # 静默模式,只显示容器编号。 exit # 容器停止退出 ctrl+P+Q # 容器不停止退出 # 启动停止容器 docker start (容器id or 容器名) # 启动容器 docker restart (容器id or 容器名) # 重启容器 docker stop (容器id or 容器名) # 停止容器 docker kill (容器id or 容器名) # 强制停止容器 # 删除容器 docker rm 容器id # 删除指定容器 docker rm -f $(docker ps -a -q) # 删除所有容器 docker ps -a -q|xargs docker rm # 删除所有容器常用其他命令
后台启动容器
# 命令 docker run -d 容器名 # 例子 docker run -d centos # 启动centos,使用后台方式启动 # 问题: 使用docker ps 查看,发现容器已经退出了! # 解释:Docker容器后台运行,就必须有一个前台进程,容器运行的命令如果不是那些一直挂起的命 令,就会自动退出。 # 比如,你运行了nginx服务,但是docker前台没有运行应用,这种情况下,容器启动后,会立即自 杀,因为他觉得没有程序了,所以最好的情况是,将你的应用使用前台进程的方式运行启动。
查看日志
# 命令 docker logs -f -t --tail 容器id # 例子:我们启动 centos,并编写一段脚本来测试玩玩!最后查看日志 [root@kuangshen ~]# docker run -d centos /bin/sh -c "while true;do echo kuangshen;sleep 1;done" # -t 显示时间戳 # -f 打印最新的日志 # --tail 数字 显示多少条! [root@kuangshen ~]# docker logs -tf --tail 10 c8530dbbe3b4
查看容器中运行的进程信息,支持 ps 命令参数。
# 命令 docker top 容器id # 测试 [root@kuangshen ~]# docker top c8530dbbe3b4 UID PID PPID C STIME TTY TIME CMD root 27437 27421 0 16:43 ? 00:00:00 /bin/sh -c ....
查看容器/镜像的元数据
# 命令 docker inspect 容器id # 测试 [root@kuangshen ~]# docker inspect c8530dbbe3b4
进入正在运行的容器
# 命令1 docker exec -it 容器id bashShell # exec 是在容器中打开新的终端,并且可以启动新的进程 # 命令2 docker attach 容器id # attach 直接进入容器,不会启动新的进程
从容器内拷贝文件到主机上
# 命令 docker cp 容器id:容器内路径 目的主机路径 # 测试 [root@dragon ~]# docker attach bfdac335ab04 # 进入容器 # 容器内执行,创建一个文件测试 [root@bfdac335ab04 /]# cd /home [root@bfdac335ab04 home]# touch test.java [root@bfdac335ab04 home]# ls test.java [root@bfdac335ab04 home]# exit exit # linux复制查看,是否复制成功 [root@dragon /]# docker cp bfdac335ab04:/home/test.java /home [root@dragon /]# cd home [root@dragon home]# ls admin test.java www小结
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p9n3KWg2-1654088143146)(C:/Users/hasee/AppData/Roaming/Typora/typora-user-images/image-20210122134035554.png)]
作者:慕_女神
链接:https://www.imooc.com/article/308172
来源:慕课网
# 下载tomcat docker pull tomcat # 启动运行 -d 后台运行 docker run -d -p 8080:8080 --name tomcat9 tamcat # 进入tomcat docker exec -it tomcat9 /bin/bash # 访问网页发现问题,没有webapps,阿里云镜像的原因。默认是最小的镜像,所有不必要的都剔除掉。 # 所以我们需要把webapps.dist中的内容cp到webapps中 cp -r webapps.dist*** 安装MySql,同步数据# 安装镜像 [root@dragon ~]# docker pull mysql:5.7 # 安装启动mysql,需要设置密码的 # 官方测试 $ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag # 运行容器,做数据挂载! -d 后台运行 -p 端口映射 -v 卷挂载 -e 环境配置 --name 容器姓名 [root@dragon ~]# docker run -d -p 3344:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=1234 --name mysql01 mysql:5.7 # 启动成功后,用本地sqlyog测试连接。 # sqlyog - 连接到服务器的3344 ---- 3344 和容器内的 3306 映射,这时候我们就可以连接上了。假设将我们的容器删除,发现挂载到本地的数据卷依旧没有丢失,这就实现了容器数据持久化功能!
初识DockerFileDockerFile:是用来构建docker镜像的构建文件!命令脚本!
通过这个脚本就能生成镜像,镜像是一层一层的,脚本一个个的命令,每个命令都是一层!
# 创建一个dockerfile文件,名字可以随便写,建议是dockerfile # 文件中的内容 指令大写 FROM centos VOLUME ["volume01","volume02"] CMD echo "--------end--------" CMD /bin/bash # 这里的每个命令就是一层镜像[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EuaYuw3b-1654088143149)(C:/Users/hasee/AppData/Roaming/Typora/typora-user-images/image-20210125195014347.png)]
生成的镜像
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uXXp0aqC-1654088143150)(C:/Users/hasee/AppData/Roaming/Typora/typora-user-images/image-20210125195040569.png)]
启动我们自己的容器
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PrnaYCWt-1654088143151)(C:/Users/hasee/AppData/Roaming/Typora/typora-user-images/image-20210125195313191.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XPGT6AMZ-1654088143152)(C:/Users/hasee/AppData/Roaming/Typora/typora-user-images/image-20210125195428876.png)]
这个卷和外部一定有一个同步目录
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gmRHbx9p-1654088143152)(C:/Users/hasee/AppData/Roaming/Typora/typora-user-images/image-20210125195856646.png)]
查看卷的挂载目录
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sx2iN500-1654088143153)(C:/Users/hasee/AppData/Roaming/Typora/typora-user-images/image-20210125195950924.png)]
测试这个文件是否同步出去了,在其中一个上边创建一个文件
这种方式我们使用的是十分多的,因为我们通常会构建自己的镜像。
加是构建镜像时候没有挂载卷,就要手动挂载 -v 卷名:容器内路径!
数据卷容器同步docker run -it --name docker02 --volumes-from docker01 dragon/centos[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v0yhYDCq-1654088143154)(C:/Users/hasee/AppData/Roaming/Typora/typora-user-images/image-20210125201410722.png)]
分别启动两个容器,进行挂载,测试。
也可以多个容器挂载其中一个容器,如果删除主容器,那么其他容器的共享内容不会消失。
文件是拷贝过去的,而不是在线共享的,所有当一个容器宕机了,也不影响其他容器的文件。
多个Mysql实现数据同步
[root@dragon ~]# docker run -d -p 3344:3306 -v /etc/mysql/conf.d -v /var/lib/mysql -e MYSQL_ROOT_PASSWORD=1234 --name mysql01 mysql:5.7 [root@dragon ~]# docker run -d -p 3344:3306 -e MYSQL_ROOT_PASSWORD=1234 --name mysql02 --volumes-from mysql01 mysql:5.7 # 这样就可以实现两个MySQL数据共享了DockerFile DockerFile介绍dockerfile 是用来构建docker镜像的文件!命令参数脚本!
构建步骤:
- 编写一个 dockerfile 文件
- docker build 构建成一个镜像
- docker run 运行镜像
- docker push 发布镜像(DockerHub、阿里云镜像仓库!)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yTCwcGMX-1654088143155)(C:/Users/hasee/AppData/Roaming/Typora/typora-user-images/image-20210125203124252.png)]
很多官方的镜像都是基础包,很多功能都没有,我们通常会自己搭建镜像!
DockerFile构建过程基础知识:
- 每个保留关键之都必须是大写字母
- 执行从上到下顺序执行
- #表示注释
- 每一个指令都会创建提交一个新的镜像层,并提交!
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4zc8C7G1-1654088143156)(C:/Users/hasee/AppData/Roaming/Typora/typora-user-images/image-20210125203706609.png)]
DockerFile指令FROM # 基础镜像,一切从这里开始构建 MAINTAINER # 镜像是谁写的,姓名 + 邮箱 RUN # 镜像构建的时候需要运行的命令 ADD # 步骤:tomcat 镜像,这个tomcat压缩包!添加内容 WORKDIR # 镜像的工作目录 VOLUME # 挂载的目录 EXPOSE # 保留端口配置 CMD # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代 ENTRYPOINT # 指定这个容器启动的时候要运行的命令,可以追加命令 ONBUILD # 当构建一个被继承 DockerFile 这个时候就会运行 ONBUILD 的指令,触发命令 COPY # 类似ADD,将我们文件拷贝到镜像 ENV # 构建的时候设置环境变量![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iohVdxsg-1654088143156)(C:/Users/hasee/AppData/Roaming/Typora/typora-user-images/image-20210125204206806.png)]
ENTRYPOINT 和 CMD 的区别
构建两个镜像
# ENTRYPOINT FROM centos ENTRYPOINT ["ls","-a"] # 构建镜像 docker build -f dockerfile-cmd-entrypoint -t cmdentrypoint . # 运行 docker run cmdentrypoint # CMD FROM centos CMD ["ls","-a"] # 构建镜像 docker build -f dockerfile-cmd-test -t cmdtest . # 运行 docker run cmdtest两个都是运行后直接ls -a 展示列表
但是cmd在运行时无法追加操作,而ENTRYPOINT可以追加操作。
CMD
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IFvlCnsB-1654088143157)(C:/Users/hasee/AppData/Roaming/Typora/typora-user-images/image-20210125212123368.png)]
ENTRYPOINT
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ICWAsbGc-1654088143158)(C:/Users/hasee/AppData/Roaming/Typora/typora-user-images/image-20210125212158560.png)]
实战:自定义镜像 tomcat1、 mkdir tycoon/build/tomcat
2、在上述目录下 touch readme.txt
3、将 JDK 和 tomcat 安装的压缩包拷贝进上一步目录
4、在 tycoon/build/tomcat 目录下新建一个Dockerfile文件
# vim Dockerfile FROM centos MAINTAINER tycoonbo<2390721223@qq.com> #把宿主机当前上下文的read.txt拷贝到容器/usr/local/路径下 COPY readme.txt /usr/local/readme.txt #把java与tomcat添加到容器中 ADD jdk-8u281-linux-x64.tar.gz /usr/local/ ADD apache-tomcat-9.0.40.tar.gz /usr/local/ #安装vim编辑器 RUN yum -y install vim #设置工作访问时候的WORKDIR路径,登录落脚点 ENV MYPATH /usr/local/ WORKDIR $MYPATH #配置java与tomcat环境变量 ENV JAVA_HOME /usr/local/jdk1.8.0_281 ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.40 ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.40 ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin #容器运行时监听的端口 EXPOSE 8080 #启动时运行tomcat CMD /usr/local/apache-tomcat-9.0.40/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.40/bin/logs/catalina.out5、构建镜像
[root@dragon tomcat]# docker build -t diytomcat . ..... Successfully built ffdf6529937d Successfully tagged diytomcat:latest # 构建完成 [root@dragon tomcat]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE diytomcat latest c218a398e667 About a minute ago 640MB dragon/centos latest e854087a8ff8 18 hours ago 209MB6、运行启动 run
[root@dragon tomcat]# docker run -d -p 8088:8080 --name tycoontomcat -v /home/tycoon/build/tomcat/test:/usr/local/apache-tomcat-9.0.40/webapps/test -v /home/tycoon/build/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.40/logs diytomcat 9b8362277ba9ee903de0f9d6ac726eab804f2a4f43f4ea8de8851b2d0ff5d913[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TsgWtH49-1654088143158)(C:/Users/hasee/AppData/Roaming/Typora/typora-user-images/image-20210126140204527.png)]
7、验证测试访问! 网页访问 39.102.33.216:8088
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-91Ru5BwG-1654088143159)(C:/Users/hasee/AppData/Roaming/Typora/typora-user-images/image-20210126140410958.png)]
8、发布项目(由于做了卷挂载,所以直接在本地test文件下发布就OK!)
web.xml
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>hello,tycoonbo -----------welcome------------ <%=" my docker tomcat,tycoonbo666 "%>
<% System.out.println("-------my docker tomcat-------");%>测试
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-17F35EnQ-1654088143160)(C:/Users/hasee/AppData/Roaming/Typora/typora-user-images/image-20210126142641655.png)]
# 查看日志 [root@dragon tomcat]# cd tomcatlogs/ [root@dragon tomcatlogs]# ls catalina.2021-01-26.log host-manager.2021-01-26.log localhost_access_log.2021-01-26.txt catalina.out localhost.2021-01-26.log manager.2021-01-26.log [root@dragon tomcatlogs]# cat catalina.out ......... -------my docker tomcat------- # 搞定发布自己的镜像 上传DockerHub1、注册DockerHub
2、在xshell中登录DockerHub
[root@dragon tomcatlogs]# docker login --help Usage: docker login [OPTIONS] [SERVER] Log in to a Docker registry. If no server is specified, the default is defined by the daemon. Options: -p, --password string Password --password-stdin Take the password from stdin -u, --username string Username # 登录成功 [root@dragon tomcatlogs]# docker login -u tycoonbo 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 # 成功提示3、登录完毕后,push镜像
# push自己的镜像到服务器上! [root@dragon /]# docker tag diytomcat tycoonbo/diytomcat:1.0 [root@dragon /]# docker push tycoonbo/diytomcat:1.0上传阿里云镜像1、登录阿里云,找到容器镜像服务
2、创建命名空间
3、创建容器镜像
4、查看镜像仓库
教你xshell登录
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8OqFJHMb-1654088143160)(C:/Users/hasee/AppData/Roaming/Typora/typora-user-images/image-20210126151646226.png)]
# 登录 [root@dragon /]# docker login --username=社会你博哥dragon registry.cn-beijing.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 # 设置 tag [root@dragon /]# docker tag c218a398e667 registry.cn-beijing.aliyuncs.com/tycoonbo-images/tycoonbo-test:1.0 # push到阿里云 [root@dragon /]# docker push registry.cn-beijing.aliyuncs.com/tycoonbo-images/tycoonbo-test:1.0小结[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lPeFITdB-1654088143161)(C:/Users/hasee/AppData/Roaming/Typora/typora-user-images/image-20210126152604246.png)]
Docker 网络 理解docker0清空所有镜像
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oGFR9Pqx-1654088143161)(C:/Users/hasee/AppData/Roaming/Typora/typora-user-images/image-20210126153505177.png)]
实战:部署redis集群# 创建网卡 docker network create redis --subnet 172.38.0.0/16 # 通过脚本创建六个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 # 启动6个容器 docker run -p 6378: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,注意这里是 sh命令 docker exec -it redis-1 /bin/sh # 创建集群 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 # 连接集群 redis-cli -c # 查看集群信息 cluster info # 查看节点 cluster nodes # set a b # 停止到存值的容器 # 然后再次get a,发现依旧可以获取值 # 查看节点,发现高可用完全没问题SpringBoot微服务打包Docker镜像Docker Compose 简介
- 构建springboot项目
- 打包应用
- 编写Dockerfile
- 构建镜像
- 发布运行!
定义、运行多个容器。 YAML file 配置文件
三步骤:
- Dockerfile保证我们的项目,可以在任何地方运行。
- service服务,docker-compose.yml 文件
- 启动 docker-compose up
作用:批量容器编排!
Compose 是 docker的开源项目。需要安装!
dockerfile 让程序在任何地方运行。
Compose :概念
- 服务service:容器,应用。
- 项目project:一组相关的容器。
1、下载
curl -L https://get.daocloud.io/docker/compose/releases/download/1.28.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
2、授权
sudo chmod +x /usr/local/bin/docker-compose体验
- 应用 app.py
- Dockerfile 应用打包为镜像
- Docker-compose yaml 文件(定义整个服务,需要的环境。web、redis) 完整上线服务!
- 启动compose 项目 (docker-compose up)
docker-compose.yml核心
# 3层! version:'' #版本 services: # 服务 服务1: web # 服务配置 images build network ..... 服务2: redis .... 服务3: redis # 其他配置 网络/卷、全局规则 volumes: networks: configs:



