2 Star 1 Fork 0

andyxiaopeng/docker_learning

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

docker 手册

注意

  1. ubuntu 出现权限不足情况,请使用sudo 管理权限。或者把当前用户加入到docker的用户组中,更新用户组(sudo newgrp docker)

docker基本操作

#1 拉取镜像到本地
docker pull 镜像名称[:tag]
    docker pull daocloud.io/library/mysql:8.0.2

#2 查看本地全部镜像
docker images 
#3 删除本地镜像
docker rmi 镜像的标识(部分标识即可,只要是本地所有镜像中可以唯一表示该镜像)
#4 镜像的导入导出
# 将本地的镜像到处
docker save -o 到处的路径 镜像id(镜像标识)
# 加载本地的镜像文件
docker load -i 镜像文件
# 修改镜像名称
docker tag 镜像id(镜像标识) 新镜像名称:版本

容器的操作

#1 运行容器
# 简单操作
docker run 镜像标识|镜像名称[:tag]    (若本地没有该镜像,则从默认仓库下载)

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

ex:docker run -d -p 8081:8080 --name tomcat b8
#2 查看正在运行的容器
docker ps [-qa]
# -a:查看全部的容器,包括没有运行
# -q:之查看容器的标识
#3 查看容器的日志
docker logs -f 容器名称(容器id)
# -f:可以滚动查看日志的最后几行
#4 进入容器内部
docker exec -it 容器名称(容器id)bash
#5 删除容器(删除容器前,需要先停止容器)
# 停止指定容器
docker stop 容器id
# 停止全部容器
docker stop $(docker ps -qa)

# 开启容器
docker start 容器id
# 开启全部容器
docker start $(docker ps -qa)

# 删除指定容器
docker rm 镜像id
# 删除全部容器
docker rm $(docker ps -qa)
#6 启动容器
docker start 容器id

Docker 应用

准备SSM工程

# 注意数据库的用户密码 以及表等信息完整迁移

准备MySQL容器

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

docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=root daocloud.io/library/mysql:8.0.2


-----
使用navicat 连接测试(失败,mysql容器无法运行,映射端口出错)

准备tomcat 容器

# 运行Tomcat容器,并且把SSM项目的War包部署到Tomcat容器内部
## 可以通过命令将宿主机的内容复制到容器内部
docker cp 文件名称 容器id:容器内部路径
## 举个例子: 
docker cp ssm.war fe:/usr/local/tomcat/webapps

数据卷

为了部署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

#ex:
docker run -d -p 8081:8080 --name tomcat_demo1 -v /home/andy/myself/docker_files/tomcat/demo1:/usr/local/tomcat/webapps b8


# 需要在数据卷目录中加入 名称为:ROOT 的文件夹,并在文件夹中放入index.HTML 的文件才可以访问(使用127.0.0.1:8081来访问)

Docker自定义镜像

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

#1 创建一个Dockerfile文件,并制定自定义镜像(Dockerfile文件是一个最基本的文本文件,但是其没有任何包括.txt 等后缀名,是没有后缀的)
# Docklerfile 文件中常用的内容
from:	指定当前自定义镜像以来的环境
copy: 	将相对路径(当前Dockerfile的路径为根)下的内容复制到自定义镜像中
workdir: 	声明镜像的默认工作目录
cmd: 	需要执行的命令(在workdir 下执行的,cmd可以写多的,只以最后一个为准)

# 举个例子,自定义一个tomcat_demo1 镜像,并且将indexhtml部署到tomcat中
from daocloud.io/library/tomcat:8.5.15-jre8
copy index.html  /usr/local/tomcat/webapps/ROOT


#2 将准备好的Dockerfile和相应的文件copy到Linux系统中,通过Docker的命令制作Docker镜像(此处的镜像名称为自定义镜像名称,tag版本号也是自定义版本号)
docker build -t 镜像名称:[tag] .

# ps: 不要忘记最后的点(.)这是代表当前目录

Docker-Compose

之前运行一个镜像,需要添加大量的参数

可以通过Docker-Compose编写这些参数

Docker-Compose可以帮助我们批量的管理这些容器

只需要通过一个docker-compose.yml 文件去维护即可。

下载Docker-Compose

#1  去github下载docker-compose

#2 复制docker-compose到linux系统

#3 对文件重命名,并修改其权限,使其成为可执行文件
1. 	mv 文件名 新文件名
2. 	chmod 777 docker-compose

# 4 添加为环境变量
# 4.1 移动文件到 bin目录下
mv docker-compose bin
# 4.2 先cd bin 移动到当前用户的bin目录, 并使用pwd 获取当前绝对路经 

# 4.3 修改 /etc/profile 中最底下 加入 刚刚pwd获取到的绝对路径(该PATH以冒号为每个环境变量的分隔符):
export PATH=xxx:xxxx:XXX
# 4.4 重新加载profile文件 
source /etc/profile 

docker-compose运行图

docekr-compose来管理mysql和tomcat容器

设定yml文件

​ yml文件以key: value方式来制定配置信息(不要忘记冒号后面还有空格)

​ 多个配置信息以换行+缩进的方式来区分

#举个例子(yml的缩进是两个空格 而不是两个制表符tab)
version: '3.1'
services:  
  mysql:                        # 服务的名称
    restart: always      # 代表只要docker 启动,那么这个容器就跟着一起启动
    image: daocloud.io/library/mysql:8.0.1     # 指定镜像
    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
    image: daocloud.io/library/tomcat:8.5.15-jre8
    container_name: tomcat
    ports: 
      - 8081:8080
      - 9988:9988
    environment: 
      TZ: Asia/Shanghai
    volumes: 
      - /opt/docker_mysql_tomcat/tomcat_webapps:/usr/lib/webapps
      - /opt/docker_mysql_tomcat/tomcat_logs:/usr/local/tomcat/logs
      

使用docker-compose命令管理容器

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

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

docker-compose成功启动mysql和tomcat服务


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

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

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

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

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: 
    - 8082:8080
  environment: 
    TZ: Asia/Sahnghai

Dockerfile

from daocloud.io/library/tomcat:8.5.15-jre8
copy index.html  /usr/local/tomcat/webapps/ROOT

使用docker-compose启动自制镜像

警告分析

# 此处警告说明镜像以前未存在,因此这次以及build出来,以后再次使用该镜像,则不会重新通过Dockerfile构建,除非你自己手动输入 “dockercompose build”或者“docker-compose up --build”来重新构建镜像

访问效果

image-20200826010859351

Docker Cl、CD

项目部署

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

​ 2、将文件上传到制定的服务器

​ 3、将war包放到tomcat的目录中

​ 4、通过dockerfile将toncat和war包转成一个镜像,由dockercompose去运行容器

项目更新

​ 将上述功能重复

CI介绍

ci(continuous intergration)持续集成

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

  • 快速发现错误
  • 防止代码偏离主分支

实现持续集成

搭建gitlab服务器

  1. 创建一个全新的虚拟机,并且指定至少4G的运行内存
  2. 安装docker以及dockercompose
  3. docekrcompose.yml文件去安装gitlab(首次下载需要下载一个多G镜像,谨慎!!!)
  4. 注意需要避免SSH的22端口冲突(修改/etc/ssh/sshd_config 文件,然后重启sshd服务 systemctl restart sshd)
versoin: '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.190.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

搭建GitLab-Runner

搭建过程非常复杂,尚未整理清楚

整合项目入门测试

  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.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 以及cocker-compose.yml文件的具体内容

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

    docker-compose.yml

    version: '3.1'
    services: 
      testci: 
        build: docker
        restart: always
        container_name: testci
        ports: 
          - 8080:8080
    

    .gitlab-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 docekr/testci.war
        - docekr-compose down
        - docker-compose up -d --build
        -dopcker rmi $(docker images -qf dangling=true)
        
    
  3. 测试

CD介绍

CD : 持续交付 持续部署

持续交付:将代码交付给专业的测试团队去测试

持续部署:将测试通过的代码,发布到生产环境

实现持续交付 持续部署

安装Jenkins

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

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

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

chmod 777 data

访问:ip:8888

输入密码

需要查看日志才能获取密码

docker-compose logs -f

手动指定插件安装

publish ssh....

git param....

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

GitLab -> Jenkins -> 目标服务器

空文件

简介

取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Docker
1
https://gitee.com/andyxiaopeng/docker_learning.git
git@gitee.com:andyxiaopeng/docker_learning.git
andyxiaopeng
docker_learning
docker_learning
main

搜索帮助