关于docker:Docker超详细基础教程

90次阅读

共计 8446 个字符,预计需要花费 22 分钟才能阅读完成。

一.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. 装置 Docker
yum makacache fast
yum -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-reload
systemctl restart docker                          

2.4 镜像的操作

# 1. 拉取镜像到本地
docker pull 镜像名称 [:tag]
# 举个例子 tomcat
docker 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-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 引言

我的项目部署

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

    1. 将文件上传到指定的服务器中
    2. 将 war 包放到 tomcat 的目录中
    3. 通过 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_config
Port 22 -> 60022
systemctl 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

查看材料中的 g i t la b-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. 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)

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

5、测试

  1. 给以后代码增加一个标签
  2. 到 Jenkins 中查看

  1. 点击上图的开始构建 (查看日志)
  2. 去指定的指标服务器中拜访具体服务

完结

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

正文完
 0