写点什么

前端上手 Docker 超详细基础教程

用户头像
1024肥宅
关注
发布于: 2021 年 03 月 01 日
前端上手Docker超详细基础教程

一.Docker 介绍


Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版)。


二.Docker 的基本操作


2.1 基本准备


这篇文章中我的运行环境都是在 CentOS7 中运行。


配套视频: 2020 Docker最新超详细版教程通俗易懂


2.2 安装 Docker


# 1.下载关于Docker的依赖环境yum -y install yum-utils device-mapper-persistent-data lvm2
复制代码


# 2.设置下载Docker的镜像源yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
复制代码


# 3.安装Dockeryum makecache fastyum -y install docker-ce
复制代码


# 4.启动Docker,并设置为开机自动启动,测试# 启动Docker服务systemctl start docker# 设置开机自动启动systemctl enable docker# 测试docker run hello-world
复制代码


2.3 Docker 的中央仓库


1. Docker 官方的中央仓库: 这个仓库是镜像最全的,但是下载速度较慢。

https://hub.docker.com/

2. 国内的镜像网站:网易蜂巢、daoCloud。。。

https://c.163yun.com/hub#/home

https://hub.daocloud.io/ (推荐使用)

3. 在公司内部会采用私服的方式拉取镜像。(添加配置)


# 需要在/etc/docker/daemon.json{	"registry-mirrors": ["https://registry.docker-cn.com"],	"insecure-registries": ["ip:port]}# ip:port公司私服的ip和port# 重启两个服务systemctl daemon-reloadsystemctl restart docker                          
复制代码


2.4 镜像的操作


# 1. 拉取镜像到本地docker pull 镜像名称[:tag]# 举个例子 tomcatdocker pull daocloud.io/library/tomcat:8.5.15-jre8
复制代码


# 2. 查看全部本地的镜像docker images
复制代码


# 3. 删除本地镜像docker rmi 镜像的标识
复制代码


# 4. 镜像的导入导出(不规范)# 将本地的镜像导出docker save -o 导出的路径 镜像id# 加载本地的镜像文件docker load -i 镜像文件# 修改镜像名称docker tag 镜像id 新镜像名称:版本
复制代码


2.5 容器的操作


# 1. 运行容器# 简单操作docker run 镜像的标识|镜像名称[tag]# 常用的参数docker run -d -p  宿主机端口:容器端口 --name 容器名称 镜像的标识|镜像名称[tag]# -d: 代表后台运行容器# -p: 宿主机端口:容器端口: 为了映射当前Linux的端口和容器的端口# --name 容器名称: 指定容器的名称
复制代码


# 2. 查看正在运行的容器docker ps [OPTIONS]# OPTIONS说明:# -a: 代表查看全部的容器,包括没有运行# -q: 只查看容器的标识# -f: 根据条件过滤显示的内容# --format: 指定返回值的模板文件# -l: 显示最近创建的容器# -n: 列出最近创建的n个容器# --no-trunc: 不截断输出# -s: 显示总的文件大小
复制代码


# 3. 查看容器的日志docker logs -f 容器id# -f: 可以滚动查看日志的最后几行
复制代码


# 4. 进入到容器内部docker exec -it 容器id bash
复制代码


# 5. 删除容器(删除容器前,需要先停止容器)docker stop 容器id# 停止指定的容器docker stop $(docker ps -qa)# 停止全部容器docker rm 镜像id# 删除指定容器docker rm $(docker ps -qa)# 删除全部容器
复制代码


#6. 启动容器docker start 容器id
复制代码


三.Docker 应用


3.1 准备 SSM 工程


# MySQL数据库的连接用户名和密码改变了,修改db.propreties# 项目重新打包mvn clean package -DskipTests# 项目地址链接: https://pan.baidu.com/s/1F4xTLoOFCMb7rl1VUrBASA  密码: bgjw
复制代码


3.2 准备 MySQL 容器


# 运行MySQL容器docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=root daocloud.io/library/mysql:5.7.4
复制代码


3.3 准备 Tomcat 容器


# 运行Tomcat容器,在上面容器操作中已经搞定,只需要将SSM项目的war包部署到Tomcat容器内部# 可以通过命令将宿主机的内容复制到容器内部docker cp 文件名称 容器id:容器内部路径# 举个例子docker cp ssm.war fe:/usr/local/tomcat/webapps/
复制代码


3.4 数据卷


为了部署 SSM 的工程,需要使用到 cp 的命令将宿主机内的 ssm.war 文件复制到容器内部。

数据卷:将宿主机的一个目录映射到容器的一个目录中。

可以在宿主机中操作目录中的内容,那么容器内部映射的文件,也会跟着一起改变。


# 1. 创建数据卷docker volume create 数据卷名称# 创建数据卷之后默认会存放在一个目录下 /var/lib/docker/volumes/数据卷名称/_data
复制代码


# 2. 查看数据卷的详细信息docker volume inspect 数据卷名称
复制代码


# 3. 查看全部数据卷docker volume ls
复制代码


# 4. 删除数据卷docker volume rm 数据卷名称
复制代码


# 5. 应用数据卷# 当你映射数据卷时,如果数据卷不存在。Docker会帮你自动创建docker run -v 数据卷名称:容器内部路径 镜像id# 直接指定一个路径作为数据卷的存放位置。这个路径下是空的。docker run -v 路径:容器内部的路径 镜像id
复制代码


四.Docker 自定义镜像


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


# 1. 创建一个Dockerfile文件,并且指定自定义镜像信息。# Dockerfile文件中常用的内容from: 指定当前自定义镜像依赖的环境copy: 将相对路径下的内容复制到自定义镜像中workdir: 声明镜像的默认工作目录cmd: 需要执行的命令(在workdir下执行的,cmd可以写多个,只以最后一个为准)# 举个例子,自定义一个tomcat镜像,并且将ssm.war部署到tomcat中from daocloud.io/library/tomcat:8.5.15-jre8copy 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-Composehttps://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-composechmod 777 docker-compose
# 4. 方便后期操作,配置一个环境变量# 将docker-compose文件移动到了/usr/local/bin,修改了/etc/profile文件,给/usr/local/bin配置到了PATH中mv docker-compose /usr/local/binvi /etc/profile export PATH=/usr/local/bin:$PATHsource /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-jre8copy 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 引言


项目部署

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

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

3. 将 war 包放到 tomcat 的目录中

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

项目更新了

​ 将上述流程再次的从头到尾的执行一次


6.2 CI 介绍


CI(continuous intergration)持续集成

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

- 快递发现错误。

- 防止代码偏离主分支。


6.3 实现持续集成


6.3.1 搭建 Gitlab 服务器


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

2、安装 docker 以及 docker-compose

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


vi /etc/ssh/sshd_configPort 22 -> 60022systemctl restart sshd
复制代码


4、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


查看资料中的 gitlab-runner 文件即可安装


6.3.3 整合项目入门测试


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

2、编写 gitlab-ci.yml 文件


stages:  - test
test: stage: test script: - echo first test ci # 输入的命令
复制代码


3、将 maven 工程推送到 gitlab 中


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


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



6.3.4 编写.gitlab-ci.yml 文件


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


stages:  - test
test: stage: test script: - echo first test ci - /usr/local/maven/apache-maven-3.6.3/bin/mvn package
复制代码


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


# 1. DockerfileFROM daocloud.io/library/tomcat:8.5.15-jre8COPY testci.war /usr/local/tomcat/webapps
复制代码


# 2. docker-compose.ymlversion: '3.1'services:  testci:    build: docker    restart: always    container_name: testci    ports:    - 8080:8080
复制代码


# 3. ci.ymlstages:  - 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)
复制代码


3、测试



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 -> 目标服务器


1、Jenkins 去连接目标服务器


左侧的系统设置



选中系统设置



搜索 Publish over SSH



点击新增



----


6.5.3 配置 Gitlab 免密码登录


1、登录 Jenkins 容器内部


docker exec -it jenkins bash
复制代码


2、输入生成 SSH 密钥命令


ssh-keygen -t rsa -C "邮箱"
复制代码


3、将密钥复制到 Gitlab 的 SSH 中



6.5.4 配置 JDK 和 Maven


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


2、手动解压



3、在监控界面中配置 JDK 和 Maven



6.5.5 手动拉取 gitlab 项目


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



6.5.6 创建 maven 任务


1、创建 maven 工程,推送到 gitlab


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




3、执行 maven 任务




4、最终效果



6.6 实现持续交付持续部署


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



2、重新制定构建项目的方式




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



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


FROM daocloud.io/library/tomcat:8.5.15-jre8COPY testcd-1.0-SNAPSHOT.war /usr/local/tomcat/webapps
复制代码


version: '3.1'services:  testcd:    build: docker    restart: always    container_name: testcd    ports:      - 8081:8080
复制代码


5、测试

1. 给当前代码添加一个标签

2. 到 Jenkins 中查看



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

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


结束

到这里这篇文章就结束了,如果你觉得这篇文章有用的话,请帮忙点个赞!谢谢!!


发布于: 2021 年 03 月 01 日阅读数: 42
用户头像

1024肥宅

关注

公众号: 1024肥宅 2021.03.01 加入

还未添加个人简介

评论

发布
暂无评论
前端上手Docker超详细基础教程