数据人成长交流的一站式服务平台

网站首页 > 数据编程 正文

「Docker」超详细基础教程-下篇

nandi88 2024-09-21 02:56:24 数据编程 20 ℃


四、Docker自定义镜像


中央仓库上的镜像,也是Docker的用户自己上传过去的。


# 1. 创建一个Dockerfile文件,并且指定自定义镜像信息。
# Dockerfile文件中常用的内容
from: 指定当前自定义镜像依赖的环境
copy: 将相对路径下的内容复制到自定义镜像中
workdir: 声明镜像的默认工作目录
cmd: 需要执行的命令(在workdir下执行的,cmd可以写多个,只以最后一个为准)
# 举个例子,自定义一个tomcat镜像,并且将ssm.war部署到tomcat中
from daocloud.io/library/tomcat:8.5.15-jre8
copy ssm.war /usr/local/tomcat/webapps


# 2. 将准备好的Dockerfile和相应的文件拖拽到Linux操作系统中,通过Docker的命令制作镜像
docker build -t 镜像名称:[tag] .




五、Docker-Compose


之前运行一个镜像,需要添加大量的参数,可以通过Docker-Compose编写这些参数。


Docker-Compose可以帮助我们批量的管理容器,只需要通过一个docker-compose.yml文件去维护即可。


5.1

下载Docker-Compose


# 1. 去Github官网搜索docker-compose,下载1.24.1版本的Docker-Compose
https://github.com/docker/compose/releases/download/1.24.1/docker-compose-Linux-x86_64




# 2. 将下载好的文件拖拽到Linux系统中
将文件上传到你所使用的服务器或者虚拟机,然后将文件移动到/usr/local




# 3. 需要将Docker-Compose文件的名称修改一下,基于Docker-Compose文件一个可执行的权限
mv docker-compose-Linux-x86_64 docker-compose
chmod 777 docker-compose




# 4. 方便后期操作,配置一个环境变量
# 将docker-compose文件移动到了/usr/local/bin,修改了/etc/profile文件,给/usr/local/bin配置到了PATH中
mv docker-compose /usr/local/bin
vi /etc/profile
export PATH=/usr/local/bin:$PATH
source /etc/profile




# 5. 测试一下
# 在任意目录下输入docker-compose




5.2

Docker-Compose管理MySQL和Tomcat容器


yml文件以key:value方式来指定配置信息,多个配置信息以换行+缩进的方式来区分,在docker-compose.yml文件中,不要使用制表符。


version: '3.1'
services:
  mysql:                     # 服务的名称
    restart: always          # 代表只要Docker启动,那么这个容器就跟着一起启动
    image: daocloud.io/library/mysql:5.7.4     # 指定镜像路径
    container_name: mysql    # 指定容器名称
    ports:
      - 3306:3306        # 指定端口号的映射
    environment:
      MYSQL_ROOT_PASSWORD: root         # 指定MySQL的ROOT用户登录密码
      TZ: Asia/Shanghai                 # 指定时区
    volumes:
      - /opt/docker_mysql_tomcat/mysql_data:/var/lib/mysql        # 映射数据卷
  tomcat:
    restart: always          # 代表只要Docker启动,那么这个容器就跟着一起启动
    image: daocloud.io/library/tomcat:8.5.15-jre8     # 指定镜像路径
    container_name: tomcat    # 指定容器名称
    ports:
      - 8080:8080        # 指定端口号的映射
    environment:
      MYSQL_ROOT_PASSWORD: root         # 指定MySQL的ROOT用户登录密码
      TZ: Asia/Shanghai                 # 指定时区
    volumes:
      - /opt/docker_mysql_tomcat/tomcat_webapps:/usr/local/tomcat/webapps        # 映射数据卷
      - /opt/docker_mysql_tomcat/tomcat_logs:/usr/local/tomcat/logs        # 映射数据卷



5.3

使用docker-compose命令管理容器

在使用docker-compose的命令时,默认会在当前目录下找docker-compose.yml。


# 1. 基于docker-compose.yml启动管理的容器
docker-compose up -d


# 2. 关闭并删除容器
docker-compose down


# 3. 开启 | 关闭 | 重启已经存在的由docker-compose维护的容器
docker-compose start | stop | restart


# 4. 查看由docker-compose管理的容器


docker-compose ps


# 5. 查看日志
docker-compose logs -f



5.4

docker-compose配置Dockerfile使用


使用docker-compose.yml文件以及Dockerfile文件在生产自定义镜像的同时启动当前镜像,并且由docker-compose去管理容器。


docker-compose.yml


# yml文件


version: '3.1'
services:
  ssm:
    restart: always
    build:          # 构建自定义镜像
      context: ../. # 指定dockerfile文件的所在路径
      dockerfile: Dockerfile  # 指定Dockerfile文件名称
    image: ssm:1.0.1
    container_name: ssm
    ports:
      - 8081:8080
    environment:
      TZ: Asia/Shanghai


Dockerfile文件


from daocloud.io/library/tomcat:8.5.15-jre8
copy ssm.war /usr/local/tomcat/webapps


# 可以直接启动基于docker-compose.yml以及Dockerfile文件构建的自定义镜像


dockr-compose up -d
# 如果自定义镜像不存在,会帮助我们构建出自定义镜像,如果自定义镜像已经存在,会直接运行这个自定义镜像
# 重新构建的话
# 重新构建自定义镜像
docker-compose build
# 运行前,重新构建
docker-compose up -d --build




六、Docker DI、CD


6.1

引言


项目部署

* 将项目通过maven进行编译打包

* 将文件上传到指定的服务器中

* 将war包放到tomcat的目录中

* 通过Dockerfile将Tomcat和war包转成一个镜像,由DockerCompose去运行容器


项目更新了,将上述流程再次的从头到尾的执行一次。



6.2

CI介绍


CI(continuous intergration)持续集成,持续集成:编写代码时,完成了一个功能后,立即提交代码到Git仓库中,将项目重新的构建并进行测试。


* 快递发现错误。

* 防止代码偏离主分支。



6.3

实现持续集成



6.3.1 搭建Gitlab服务器


* 创建一个全新的虚拟机,并且至少指定4G的运行内存


* 安装docker以及docker-compose


* 将ssh的默认22端口,修改为60022端口


vi /etc/ssh/sshd_config
Port 22 -> 60022
systemctl restart sshd


* docker-compose.yml文件去安装Gitlab(下载和运行的时间比较长)


version: '3.1'
services:
  gitlab:
    image: 'twang2218/gitlab-ce-zh:11.1.4'
    container_name: 'gitlab'
    restart: always
    privileged: true
    hostname: 'gitlab'
    environment:
      TZ: 'Asia/Shanghai'
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://192.168.199.110'
        gitlab_rails['time_zone'] = 'Asia/Shanghai'
        gitlab_rails['smtp_enable'] = true
        gitlab_rails['gitlab_shell_ssh_port'] = 22
    ports:
      - '80:80'
      - '443:443'
      - '22:22'
    volumes:
      - /opt/docker_gitlab/config:/etc/gitlab
      - /opt/docker_gitlab/data:/var/opt/gitlab
      - /opt/docker_gitlab/logs:/var/log/gitlab




6.3.2 搭建Gitlab-Runner


查看资料中的g i t la b-runner文件即可安装。




6.3.3 整合项目入门测试


* 创建一个maven工程,添加web.xml文件,编写html页面


* 编写gitlab-ci.yml文件


stages:
  - test




test:
  stage: test
  script:
    - echo first test ci # 输入的命令


* 将maven工程推送到gitlab中


* 可以在gitlab中查看到gitlab-ci.yml编写的内容


打开gitlab控制台-左侧CI/CD-流水线-已通过




6.3.4编写.gitlab-ci.yml文件


* 编写.gitlab-ci.yml测试命令使用


stages:
  - test




test:
  stage: test
  script:
    - echo first test ci
    - /usr/local/maven/apache-maven-3.6.3/bin/mvn package


* 编写关于dockerfile以及dock er-compose.yml文件的具体内容


# 1. Dockerfile
FROM daocloud.io/library/tomcat:8.5.15-jre8
COPY testci.war /usr/local/tomcat/webapps


# 2. docker-compose.yml
version: '3.1'
services:
  testci:
    build: docker
    restart: always
    container_name: testci
    ports:
    - 8080:8080


# 3. ci.yml
stages:
  - test




test:
  stage: test
  script:
    - echo first test ci
    - /usr/local/maven/apache-maven-3.6.3/bin/mvn package
    - cp target/testci-1.0-SNAPSHOT.war docker/testci.war
    - docker-compose down
    - docker-compose up -d --build
    - docker rmi $(docker images -qf dangling=true)


* 测试



6.4

CD介绍


CD(持续交付,持续部署)



6.5

实现持续交付持续部署




6.5.1 安装Jenkins


官网:https://www.jenkins.io/


version: '3.1'
services:
  jeckins:
    image: jenkins/jenkins
    restart: always
    container_name: jenkins
    ports:
      - 8888:8080
      - 50000:50000
    volumes:
      - ./data:/var/jenkins_home


第一次运行时,会因为data目录没有权限,导致启动失败


chmod 777 data


访问http://192.168.199.109:8888


访问速度奇慢无比。。。。


输入密码



手动指定插件安装:指定下面两个插件即可


Publish ssh
git param…


这里安装过程忘了截图了。。。因为服务器安装的太快,没反应过来,安装成功后,需要指定用户名和密码。



6.5.2 配置目标服务器以及Gitlab免密码登录


Gitlab -> Jenkins -> 目标服务器


* Jenkins去连接目标服务器


左侧的系统设置



选中系统设置


搜索Publish over SSH


点击新增




6.5.3 配置Gitlab免密码登录


* 登录Jenkins容器内部


docker exec -it jenkins bash


* 输入生成SSH密钥命令


ssh-keygen -t rsa -C "邮箱"


* 将密钥复制到Gitlab的SSH中




6.5.4 配置JDK和Maven


* 复制本地的jdk和maven的压缩包到data目录下


* 手动解压


* 在监控界面中配置JDK和Maven




6.5.5 手动拉取gitlab项目


使用SSH无密码连接时,第一次连接需要手动确定




6.5.6 创建maven任务


* 创建maven工程,推送到gitlab


* jenkins的监控页面中创建maven任务



* 执行maven任务



* 最终效果



6.6

实现持续交付持续部署


* 安装Git Parameter的插件,Persistent Parameter的插件(版本)


* 重新制定构建项目的方式


* 构建项目成功后,需要将内容发布到目标服务器


* 修改程序代码,(提交到GitLab仓库中)


FROM daocloud.io/library/tomcat:8.5.15-jre8


COPY testcd-1.0-SNAPSHOT.war /usr/local/tomcat/webapps


version: '3.1'


services:


  testcd:


    build: docker


    restart: always


    container_name: testcd


    ports:


      - 8081:8080


* 测试


给当前代码添加一个标签

到Jenkins中查看

点击上图的开始构建(查看日志)

去指定的目标服务器中访问具体服务

Tags:

最近发表
标签列表