Skip to content

Docker

Docker 基本操作

快速开始

bash
docker pull ubuntu

docker run -d -it -p 22:22 -v /Users/qiuyeyijian/Workspace/Docker/ubuntu:/home/Workspace --name ubuntu ubuntu

docker attach 容器id/name
sudo docker exec -it 容器id/name /bin/bash

docker system df --verbose
  • -it: 以交互方式启动容器
  • -p: 当前物理机端口到容器端口的映射
  • --name: 为当前要运行的容器起个名字
  • -v: 本地路径到容器内路径的映射
  • -d: 代表后台运行容器
  • --restart=always

更新软件源:ubuntu-ports | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

如果报The certificate is NOT trusted. 在docker中执行如下命令

cpp
touch /etc/apt/apt.conf.d/99verify-peer.conf  && echo >>/etc/apt/apt.conf.d/99verify-peer.conf "Acquire { https::Verify-Peer false }"

安装 Docker

bash
# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3: 更新并安装Docker-CE
dnf install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm

sudo yum makecache
sudo yum -y install docker-ce
# Step 4: 开启Docker服务
sudo systemctl start docker
# Step 5: 设置开机自启动
sudo systemctl enable docker
# Step 6: 测试
docker run hello-world

Docker 的中央仓库

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

    https://hub.docker.com/

  2. 国内镜像网站:网易蜂巢,daocloud...

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

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

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

镜像的操作

下面均使用 DaoCloud 镜像站来拉去镜像

1. 拉取镜像到本地

sh
docker pull 镜像名称[:tag]

# 举个例子, 这里使用daocloud镜像站
docker pull daocloud.io/library/tomcat:8.5.15-jre8

2. 查看本地全部镜像

sh
docker images

3. 删除本地镜像

sh
docker rmi 镜像的标识

4. 镜像的导入导出(不规范)

sh
# 将本地的镜像导出
docker save -o 导出路径 镜像id

# 加载本地的镜像文件
docker load -i 镜像文件

# 修改镜像名称
docker tag 镜像id 新镜像名称:版本

容器的操作

1. 运行容器

sh
# 简单操作
docker run 镜像标识 | 镜像名称[:tag]
sh
# 常用操作
docker run -d -p 宿主机端口:容器端口 --name 容器名称 镜像名称|镜像标识[:tag]
  • -d => 代表后台运行容器
  • -p 宿主机端口:容器端口 => 当前 Linux 物理机端口到容器端口的映射
  • --name 容器名称 => 为当前要运行的容器起个名字

2. 查看正在运行的容器

sh
docker ps [-qa]
  • -a => 查看全部容器,包括没有运行的
  • -q => 只查看容器得到的标识

3. 查看容器日志

sh
docker logs -f 容器id

4. 进入容器内部

sh
docker exec -it 容器id /bin/bash

5. 删除容器

删除容器前请先停止容器

sh
# 1. 停止指定容器
docker stop 容器id
# 2. 停止所有容器
docker stop $(docker ps -qa)

# 3. 删除指定容器
docker rm 容器id
# 4. 删除全部容器
docker rm $(docker ps -qa)

6. 启动容器

sh
docker start 容器id

Docker 的应用

sh
#可以通过命令将宿主机的内容复制到容器内部
docker cp 文件名称 容器id:容器内部路径

数据卷基本操作

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

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

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

1. 创建数据卷

sh
# 创建数据卷后,默认会存放在一个目录下 /var/lib/docker/volumes/数据卷名称/_data
docker volume create 数据卷名称

2. 查看数据卷的详细信息

sh
docker volume inspect 数据卷名称

3. 查看全部数据卷

sh
docker volume ls

4. 删除数据卷

sh
docker volume rm 数据卷名称

数据卷应用

当你映射数据卷是,如果数据卷不存在,docker 会帮你自动创建。将容器内部自带的文件,存储在默认的存放路径中。

sh
docker run -v 数据卷名称:容器内部的路径 镜像id

如果指定一个路径作为数据卷的存放位置,这个路径下是空的。

sh
docker run -v 路径:容器内部的路径 镜像id

Docker 自定义镜像

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

1. 创建一个 Dockerfile 文件,并且自定义镜像信息

sh
vim Dockerfile

Dockerfile 文件中常用的内容

  • from => 指定当前自定义镜像依赖的环境
  • copy => 将相对路径下的内容复制到自定义镜像中
  • workdir => 声明镜像的默认工作目录
  • cmd => 需要执行的命令(在 workdir 下执行的,cmd 可以写多个,只以最后一个为准)
sh
# 举个栗子 vim /root/workspace/Dockerfile
from daocloud.io/library/tomcat:8.5.15-jre8
copy /root/workspace/ssm.war /usr/local/tomcat/webapps
sh
# 写好Dockerfile文件后,在Dockerfile文件目录下,运行命令制作镜像
docker build -t 镜像名称:[tag] /root/workspace/Dockerfile

Docker-Compose

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

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

下载安装

1. 去 GitHub 下载 Docker-Compose

docker-compose-Linux-x86_64

2. 赋予可执行权限

sh
# 重命名,方便接下来的操作
mv docker-compose-Linux-x86_64 docker-compose

# 赋予可执行权限
chmod 755 docker-compose

3. 配置环境变量

sh
# 将docker-compose文件移动到 /usr/local/bin
mv docker-compose /usr/local/bin

echo "export PATH=$PATH:/usr/local/bin" >> /etc/profile.d/docker-compose.sh
chmod 755 /etc/profile.d/docker-compose.sh

编写配置文件

yml 文件以 key:value 方式来指定配置信息

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

在 docker-compose.yml 文件中,不要使用制表符

yaml
version: "3.1"
services:
  mysql: # 服务名称
    restart: always #代表只要docker启动,那么这个容器就跟着一起启动
    image: daocloud.io/library/mysql:5.7.6 #指定镜像路径
    container_name: mysql # 指定容器名称
    ports:
      - 3306:3306 # 指定端口号的映射,可以指定多个,在下面继续添加即可
    environment:
      MYSQL_ROOT_PASSWORD: root # 指定mysql的root用户的登录密码
      TZ: Asia/Shanghai # 指定时区
  tomcat:
    restart: always
    image: daocloud.io/library/tomcat:8.5.15-jre8
    container_name: tomcat
    ports:
      - 8080:8080
    environment:
      TZ: Asia/Shanghai
    volumes:
      - /opt/docker/tomcat/webapps:/usr/local/tomcat/webapps
      - /opt/docker/tomcat/logs:/usr/local/tomcat/logs

使用 docker-compose 命名管理容器

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

yaml
# 启动管理的容器
docker-compose up -d

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

# 开启|关闭|重启已经存在的有docker-compose维护的容器
docker-compose start|stop|resart

# 查看容器
docker-compose ps

#查看日志
docker-compose logs -f

docker-compose 配置 Dockfile 使用

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

yaml
# docker-compose.yml 文件
version: "3.1"
services:
  test:
    restart: always
    build:
      context: ./
      dockerfile: Dockerfile
    image: test:1.0.1
    container_name: ssm
    ports:
      - 8081:8080
    environment:
      TZ: Asia/Shanghai
sh
# Dockerfile 文件
from daocloud.io/library/tomcat:8.5.15-jre8
copy /root/workspace/ssm.war /usr/local/tomcat/webapps

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

sh
docker-compose up -d

如果自定义镜像不存在,会帮助我们构建出自定义镜像,如果自定义镜像已经存在,会直接运行这个自定义镜像

如果需要重新构建自定义镜像,使用

sh
# 只是重新构建
docker-compose build

# 运行前构建
docker-compose up -d --build

Docker 一些问题

进入容器内部

sh
//根据容器id 进入对应镜像文件夹, 可修改相关配置文件,
docker exec -it 容器id /bin/bash

//如果需要以root 用户的身份进入容器则使用
docker exec -it --user root 容器id /bin/bash

容器自启动

运行容器的时候,加上 --restart=always 命令可以令容器自启动

sh
docker run -d --restart=always -p 10240:8080 -p 10241:50000 -v /var/jenkins_node:/var/jenkins_home -v /etc/localtime:/etc/localtime --name myjenkins jenkins/jenkins

如果启动容器的时候没有加 --restart=always 命令,可以使用如下命令,来更新

sh
sudo docker update --restart=always 容器id

使用 on-failure 策略时,指定 Docker 将尝试重新启动容器的最大次数。默认情况下,Docker 将尝试永远重新启动容器。

sh
sudo docker update --restart=on-failure:10 容器id		//最大重启10次

--restart 具体参数值详细信息:

  • --restat=no 容器退出时,不重启容器
  • --restart=no-failure只有在非 0 状态退出时才重新启动容器;
  • --restart=always 无论退出状态是如何,都重启容器;

Docker CI, CD

MYSQL

bash
# 拉取镜像
sudo docker run -p 3306:3306 --name mysql --restart=always -e MYSQL_ROOT_PASSWORD=123456 -d mysql

Tomcat

version: "3.1"
services:
  tomcat:
    restart: always
    image: daocloud.io/library/tomcat:8.5.15-jre8
    container_name: tomcat
    ports:
      - 8080:8080
    environment:
      TZ: Asia/Shanghai
    volumes:
      - /opt/docker/tomcat/webapps:/usr/local/tomcat/webapps
      - /opt/docker/tomcat/logs:/usr/local/tomcat/logs

Released under the MIT License.