Docker

流行的微服务容器

简介

  1. 优点:与传统虚拟机相比,Docker优势体现在启动速度快,占用体积小
  2. Docker是一个客户端-服务器(C/S)的架构程序
  3. Docker镜像与容器:镜像是用来运行容器,一个镜像可以构建多个容器
  4. Registry(注册中心):Docker用Registry来保存用户的镜像,用户可以在DockerHub保存自己的镜像

安装和启动

Centos7.x版本安装

1
2
3
4
5
6
7
8
9
10
11
12
# 更新源
sudo yum update
# 卸载旧版本
sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine
# 安装支持devicemapper存储类型
sudo yum update
sudo yum install -y yum-utils \device-mapper-persistent-data \lvm2
# 添加软件源
sudo yum-config-manager --add-repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
# 安装Docker
sudo yum update
sudo yum install docker-ce

Ubuntu安装

1
2
3
4
5
6
7
8
9
sudo apt update
sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

sudo apt update
sudo apt install docker-ce

设置USTC镜像

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
vi /etc/docker/daemon.json
# 输入
{
"registry-mirrors": [
"https://mirror.ccs.tencentyun.com"
]
}
# 执行
systemctl daemon-reload
systemctl restart docker
# 执行
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io

# 重启
service docker restart

Docker启动与停止

命令 作用
systemctl start docker 启动Docker
systemctl stop docker 停止Docker
systemctl restart docker 重启Docker
systemctl status docker 查看Docker状态
systemctl enable docker 设置开机启动
docker info 查看Docker概要信息
docker –help 查看Docker帮助文档

常用命令

镜像相关命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 查看本地镜像,这些镜像都存储在Docker宿主机的/var/lib/docker目录下
docker images
# 镜像名称
REPOSITORY
# 镜像标签
TAG
# 镜像创建时间
CREATED
# 镜像大小
SIZE
# 搜索镜像
docker search + 镜像名称
# 仓库名称
NAME
# 镜像描述
DESCRIPTION
# 用户评价
STARS
# 是否是官方的
OFFICIAL
# 自动构建,表示是由Docker Hub自动构建形成的:AUTOMATED
# 拉取镜像
docker pull + 查看到的镜像名称

# 列出所有容器
docker ps -aq
# 停止所有容器
docker stop $(docker ps -aq)
# 删除所有容器
docker rm $(docker ps -aq)
# 删除所有的镜像
docker rmi $(docker images -q)

容器相关命令

  • 查看正在运行的容器:docker ps
    • 加上-a查看所有容器
    • 加上-l查看最后一次运行的容器
    • 加上-f status-exited查看停止的容器
  • 创建容器:docker run
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# 运行容器
-i
# 容器启动后会进入命令行。和-i一起用会登录进入这个容器,创建一个伪终端
-t
# 为创建的容器命名
--name
# 目录映射关系,把宿主机中的一个目录和容器的目录形成映射,操作宿主机目录相当于操作容器目录
-v
# 创建一个守护式容器在后台运行
-d
# 端口映射
-p
# 退出当前容器
exit

# 交互式方式创建容器:退出容器,容器自动关闭
docker run -it --name=容器名称 镜像名称:标签 /bin/bash
# 守护式方式创建容器:退出容器,容器不关闭,仍然在后台运行
docker run -di --name=容器名称 镜像名称:标签

# 进入容器
docker exec -it 容器名称 /bin/bash
# 停止容器
docker stop 容器名称(或容器ID)
# 启动容器
docker start 容器名称(或容器ID)
# 文件拷贝到容器
docker cp 需要拷贝的文件或目录 容器名称:容器目录
# 文件拷贝出容器
docker cp 容器名称:容器目录 需要拷贝的文件或目录
# 目录挂载
docker run -di -v 宿主机目录:容器目录 --name=容器名称 镜像名称:标签
# 查看容器IP地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称
# 查看容器所有信息
docker inspect 容器名称
# 删除容器
docker rm 容器名称

备份与恢复

容器保存为镜像

docker commit 需要保存的容器名称 需要保存为镜像的镜像名称

镜像备份为tar文件

docker save -o 备份后镜像名称.tar 原镜像名称

镜像恢复

先删除原镜像,再执行docker load -i 需要恢复的tar镜像

Dockerfile

是一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像

1
2
# 执行Dockerfile文件
docker build -t='镜像名称' 指定Dockerfile存在的位置

常用命令

命令 作用
FROM 镜像名称:标签 定义了使用哪个基础镜像启动构建流程
MAINTAINER 名字 声明镜像的创建者
ENV key value 设置环境变量
RUN command 是Docker的核心部分(可以写多条)
ADD 源目录文件
家目录文件
将宿主机的文件复制到容器中
如果是一个压缩文件将会在复制后自动解压
COPY 源目录文件
家目录文件
和ADD相似,但如果有压缩文件不能解压
WORKDIR 目录名称 设置工作目录

书写JAVA环境搭建的Dockerfile文件

1
2
3
4
5
6
7
8
9
10
FROM centos:7   声明基础镜像
MAINTAINER jtx 声明名称
WORKDIR /usr 设置当前目录
RUN mkdir /usr/local/java 创建一个目录
ADD jdk-8u11-linux-x64.tar.gz /usr/local/java 添加压缩文件(压缩文件必须在宿主机中)

ENV JAVA_HOME /usr/local/java/jdk1.8.0_171 设置jdk环境变量
EVN JRE_HOME $JAVA_HOME/jre 设置jre环境变量
ENV CLASSPATH $JAVA_HOME/bin/dt.jar:$JAVA_HOM/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH 设置CLASS环境变量
EVN PATH $JAVA_HOME/bin:$PATH 设置PATH环境变量

Docker私有仓库

搭建和配置

1
2
3
4
5
6
7
8
9
10
# 拉取私有仓库镜像
docker pull registry
# 启动私有仓库容器
docker run -di --name=registry -p 5000:5000 registry
# 浏览器打开输入ip地址:5000/v2/_catalog
# 看到{"repositories":[]}表示搭建成功,且内容为空
# 修改/etc/docker/daemon.json添加
{"insecure-registries":["ip地址:5000"]}
# 重启docker
systemctl restart docker

上传镜像到私有仓库

  1. 对需要上传的镜像打标签:docker tag 镜像名称 私有仓库地址:5000/镜像名称
  2. 启动私有仓库容器:docker start registry
  3. 上传:docker push 私有仓库地址:5000/镜像名称

下载私有仓库镜像

  1. 重复搭建的命令
  2. 启动私有仓库容器:docker start registry
  3. 执行:docker pull 私有仓库地址:5000/镜像名称

Docker出错

docker出错解决

查看挂载信息

1
docker inspect 容器名称 | grep Mounts -A 20

相关文章

Docker安装软件

Docker高级

Docker安装Alist+Aria2+Qbittorrentee

Docker设置代理