栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Docker

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Docker

Docker概述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7ZjnOFoo-1654088141765)(C:/Users/hasee/AppData/Roaming/Typora/typora-user-images/image-20210128162439879.png)]

Docker安装
  1. 卸载旧版本

    yum remove docker 
    docker-client 
    docker-client-latest 
    docker-common 
    docker-latest 
    docker-latest-logrotate 
    docker-logrotate 
    docker-engine
    
  2. 安装需要的软件包

    yum install -y yum-utils
    
  3. 设置镜像仓库

    # 正确推荐使用国内的 
    yum-config-manager --add-repo http://mirrors.aliyun.com/docker- ce/linux/centos/docker-ce.repo
    
  4. 更新yum软件包索引

    yum makecache fast
    
  5. 安装 Docker CE

    yum install docker-ce docker-ce-cli containerd.io
    
  6. 启动 Docker

    systemctl start docker
    
  7. 测试命令

    docker version 
    docker run hello-world 
    docker images
    
启动docker服务,开机自动启动mysql、redis等
# 首先开启docker开机自启动
systemctl enable docker

# 开启后我们找到想要自动重启的容器名
###################### docker update 容器名 --restart=always ############################
#例如我想要redis在docker启动时就启动
docker update redis --restart=always
docker update mysql --restart=always

Docker常用命令 帮助命令
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
来源:慕课网

安装Tamcat
# 下载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 映射,这时候我们就可以连接上了。

假设将我们的容器删除,发现挂载到本地的数据卷依旧没有丢失,这就实现了容器数据持久化功能!

初识DockerFile

DockerFile:是用来构建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镜像的文件!命令参数脚本!

构建步骤:

  1. 编写一个 dockerfile 文件
  2. docker build 构建成一个镜像
  3. docker run 运行镜像
  4. docker push 发布镜像(DockerHub、阿里云镜像仓库!)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VdfwaJvH-1654088141777)(C:/Users/hasee/AppData/Roaming/Typora/typora-user-images/image-20210125203124252.png)]

很多官方的镜像都是基础包,很多功能都没有,我们通常会自己搭建镜像!

DockerFile构建过程

基础知识:

  1. 每个保留关键之都必须是大写字母
  2. 执行从上到下顺序执行
  3. #表示注释
  4. 每一个指令都会创建提交一个新的镜像层,并提交!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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)]

实战:自定义镜像 tomcat

1、 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.out

5、构建镜像

[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         209MB

6、运行启动 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-------

# 搞定
发布自己的镜像 上传DockerHub

1、注册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镜像
  1. 构建springboot项目
  2. 打包应用
  3. 编写Dockerfile
  4. 构建镜像
  5. 发布运行!
Docker Compose 简介

定义、运行多个容器。 YAML file 配置文件

三步骤:

  1. Dockerfile保证我们的项目,可以在任何地方运行。
  2. service服务,docker-compose.yml 文件
  3. 启动 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
体验
  1. 应用 app.py
  2. Dockerfile 应用打包为镜像
  3. Docker-compose yaml 文件(定义整个服务,需要的环境。web、redis) 完整上线服务!
  4. 启动compose 项目 (docker-compose up)
yaml规则

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安装
  1. 卸载旧版本

    yum remove docker 
    docker-client 
    docker-client-latest 
    docker-common 
    docker-latest 
    docker-latest-logrotate 
    docker-logrotate 
    docker-engine
    
  2. 安装需要的软件包

    yum install -y yum-utils
    
  3. 设置镜像仓库

    # 正确推荐使用国内的 
    yum-config-manager --add-repo http://mirrors.aliyun.com/docker- ce/linux/centos/docker-ce.repo
    
  4. 更新yum软件包索引

    yum makecache fast
    
  5. 安装 Docker CE

    yum install docker-ce docker-ce-cli containerd.io
    
  6. 启动 Docker

    systemctl start docker
    
  7. 测试命令

    docker version 
    docker run hello-world 
    docker images
    
启动docker服务,开机自动启动mysql、redis等
# 首先开启docker开机自启动
systemctl enable docker

# 开启后我们找到想要自动重启的容器名
###################### docker update 容器名 --restart=always ############################
#例如我想要redis在docker启动时就启动
docker update redis --restart=always
docker update mysql --restart=always

Docker常用命令 帮助命令
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
来源:慕课网

安装Tamcat
# 下载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 映射,这时候我们就可以连接上了。

假设将我们的容器删除,发现挂载到本地的数据卷依旧没有丢失,这就实现了容器数据持久化功能!

初识DockerFile

DockerFile:是用来构建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镜像的文件!命令参数脚本!

构建步骤:

  1. 编写一个 dockerfile 文件
  2. docker build 构建成一个镜像
  3. docker run 运行镜像
  4. docker push 发布镜像(DockerHub、阿里云镜像仓库!)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yTCwcGMX-1654088143155)(C:/Users/hasee/AppData/Roaming/Typora/typora-user-images/image-20210125203124252.png)]

很多官方的镜像都是基础包,很多功能都没有,我们通常会自己搭建镜像!

DockerFile构建过程

基础知识:

  1. 每个保留关键之都必须是大写字母
  2. 执行从上到下顺序执行
  3. #表示注释
  4. 每一个指令都会创建提交一个新的镜像层,并提交!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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)]

实战:自定义镜像 tomcat

1、 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.out

5、构建镜像

[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         209MB

6、运行启动 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-------

# 搞定
发布自己的镜像 上传DockerHub

1、注册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镜像
  1. 构建springboot项目
  2. 打包应用
  3. 编写Dockerfile
  4. 构建镜像
  5. 发布运行!
Docker Compose 简介

定义、运行多个容器。 YAML file 配置文件

三步骤:

  1. Dockerfile保证我们的项目,可以在任何地方运行。
  2. service服务,docker-compose.yml 文件
  3. 启动 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
体验
  1. 应用 app.py
  2. Dockerfile 应用打包为镜像
  3. Docker-compose yaml 文件(定义整个服务,需要的环境。web、redis) 完整上线服务!
  4. 启动compose 项目 (docker-compose up)
yaml规则

docker-compose.yml核心

# 3层!

version:'' #版本
services: # 服务
	服务1: web
		# 服务配置
		images
		build 
		network
		.....
	服务2: redis 
		.... 
	服务3: redis
# 其他配置 网络/卷、全局规则
volumes: 
networks: 
configs:
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/944596.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号