# lg-docker **Repository Path**: sunli1103_admin/lg-docker ## Basic Information - **Project Name**: lg-docker - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-10-10 - **Last Updated**: 2022-03-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 作业说明 #### 课程介绍 > **第九阶段 容器技术&CI/CD、DevOps** > > 模块一 Docker容器虚拟化技术 > > 本模块主要深入讲解Docker容器虚拟化技术原理及应用,涉及Docker安装、应用,引擎、容器、镜像、仓库核心组件剖析,DockerFile、Docker数据持久化等高级实战,Swarm集群管理、Docker Compose、私有仓库等等 #### 作业内容 > 使用DockerFile构建镜像并搭建 swarm+compose集群 > > 如图: > > 输入图片说明 > > (1)Hot是应用程序(springboot),打成jar包:Hot.jar > (2)利用dockerfile将Hot.jar构建成镜像lgedu/hot:1.0 > (3)构建Swarm 集群 > (4)在 Swarm 集群中使用 compose 文件 (docker-compose.yml) 来配置、启动多个服务 包括: Mysql、Redis以及应用程序Hot > 注意:作业提交演示视频 #### 软件版本 ``` centos-7.7 jdk-11.0.7 docker-19.03.13 docker-swarm-1.2.9 docker-compose-1.26.0 ``` #### 注意问题 1. docker-compose安装地址 ```shell curl -L "https://github.com/docker/compose/releases/download/1.26.0/docker-compose-$( uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose ``` 注意mac系统复制pdf的安装路径时可能会丢掉 `docker-compose` 中的 `-` ,变成 `dockercompose` ,从而导致安装失败。 2. 注意克隆虚拟机的场合 最好是在第一台虚拟机安装和准备好相应资源后,包括各种软件、目录、代码、配置文件等,在创建swarm集群前克隆。然后在第一台虚拟机创建管理者节点,第二台虚拟机以工作者节点身份加入集群。 3. 需要登录docker hub 如果jdk的基础镜像使用 `FROM store/oracle/jdk:11`,则需要使用 `docker login` 登录docker hub后才能下载。 #### 实现步骤 **1. 安装docker** 1.1 卸载历史版本 ```shell #查看安装 yum list installed | grep docker #卸载 yum -y remove containerd.io.x86_64 yum -y remove docker-ce.x86_64 yum -y remove docker-ce-cli.x86_64 #删库 rm -rf /var/lib/docker ``` 1.2 安装官方yum源 ```shell yum install -y yum-utils yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo ``` 1.3 安装docker引擎 ```shell yum install -y docker-ce docker-ce-cli containerd.io ``` 1.4 启动docker ```shell #开机启动 systemctl enable docker #启动 systemctl start docker #查看Docker状态 docker info ``` **2. 准备docker镜像** 2.1 mysql镜像 ```shell docker pull mysql:5.7.30 ``` 2.2 redis镜像 ```shell docker pull redis:5.0.9 ``` 2.3 hot镜像 2.3.1 创建hot项目:使用idea创建springboot项目hot HotApplication.java ```java package com.lagou.hot; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import java.io.IOException; @SpringBootApplication public class HotApplication { public static void main(String[] args) throws IOException { SpringApplication.run(HotApplication.class, args); System.out.println("Hello Hot"); System.in.read(); } } ``` 2.3.2 然后使用maven的package打包成Hot.jar,并上传到虚拟机 `/root/upload/docker/build/` 2.3.3 在该目录下编写Dockerfile ```dockerfile FROM store/oracle/jdk:11 COPY Hot.jar /Hot.jar ENTRYPOINT exec java $JAVA_OPTS -jar /Hot.jar EXPOSE 8080 ``` 2.3.4 创建镜像文件 ```shell docker build -t lgedu/hot:1.0 . ``` **3. 安装compose** 3.1 下载当前稳定版本 ```shell curl -L "https://github.com/docker/compose/releases/download/1.26.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose ``` 3.2 将可执行权限应用于二进制文件 ```shell chmod +x /usr/local/bin/docker-compose ``` 3.3 添加到环境中 ```shell ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose ``` 3.4 查看版本 ```shell docker-compose --version ``` 3.5 卸载 ```shell rm /usr/local/bin/docker-compose ``` **4. 准备compose环境** 4.1 编写docker-compose.yml(swarm环境用) ```yml version: "3.0" services: mysql: image: mysql:5.7.30 ports: - 3307:3306 command: --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci --explicit_defaults_for_timestamp=true --lower_case_table_names=1 --default-time-zone=+8:00 environment: MYSQL_ROOT_PASSWORD: "root" volumes: - /docker/mysql/db:/var/lib/mysql deploy: mode: replicated replicas: 2 redis: image: redis:5.0.9 environment: - TZ=Asia/beijing ports: - 6380:6379 volumes: - /docker/redis/data:/data deploy: mode: replicated replicas: 2 hot: image: lgedu/hot:1.0 ports: - 8008:8080 deploy: mode: replicated replicas: 2 ``` 4.2 创建数据卷目录 ```shell mkdir -p /docker/mysql/data mkdir -p /docker/redis/data ``` **5. 安装swarm** 5.1 下载镜像 ```shell docker pull swarm ``` 5.2 查看版本 ```shell docker run --rm swarm -v ``` **6. 准备swarm环境** 6.1 克隆虚拟机,将第二台机器ip设置为 `192.168.3.112` 6.2 创建新集群(在111上执行) ```shell docker swarm init --advertise-addr 192.168.3.111 ``` 6.3 查看集群状态和节点信息 ```shell docker info docker node ls ``` 6.4 查看添加节点token(需在管理者节点111上执行) ```shell docker swarm join-token manager docker swarm join-token worker ``` 6.5 添加工作节点到集群(需在工作者节点112上执行) ```shell docker swarm join --token SWMTKN-1-4yib7u1p5yvj82uuyqgts55ktfaw2psxa2lmacq2rk6jdxdr86-4y136ja1hzoy08mt7rj5cqq2n 192.168.3.111:2377 ``` 6.6 可删除节点 ```shell docker swarm leave --force ``` 6.7 可发布服务到集群 ```shell docker service create -p 80:80 --replicas 2 --name service-nginx nginx ``` 6.8 可查看发布的服务 ```shell docker service ls docker service inspect --pretty service-nginx docker service ps service-nginx ``` 6.9 可删除服务 ```shell docker service rm service-nginx ``` 6.10 可查看运行的服务 ```shell docker ps ``` 6.11 可扩展服务 ```shell docker service scale service-nginx=3 docker service ls docker service ps service-nginx ``` 6.12 可更新服务 更换端口号 ```shell docker service update --publish-rm 80:80 --publish-add 88:80 service-nginx ``` 访问:http://192.168.3.111:88/ **7. 结合swarm和compose** 运行环境(需在管理者节点111上执行) ```shell cd /root/upload/docker docker stack deploy -c docker-compose.yml web ``` 查看服务 ```shell docker stack services web ``` ![输入图片说明](https://images.gitee.com/uploads/images/2020/1021/024029_2371e0cd_1712191.png "屏幕截图.png") 停止服务 ```shell docker stack down web ``` #### 视频讲解 ![视频讲解](reference/md-videos/docker.mp4)