# Image
# CentOS安装docker
- 卸载本地已有docker
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
- 安装yum-utils包,并设置稳定的仓库
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
1
2
3
4
5
2
3
4
5
- 安装最新版本的docker
sudo yum install docker-ce docker-ce-cli containerd.io
1
- 启动docker
sudo systemctl start docker
1
- 运行hello world
sudo docker run hello-world
1
# 什么是Image
- 文件(root filesystem)和meta data的集合
- 分层的,并且每一层都可以添加改变和删除文件,成为一个新的Image
- 不同的Image可以共享相同的layer
- Image本身是read-only的
- Image只包含rootfs
# 获取Image的方法
- Build from Dockerfile(从Dockerfile构建)
# 选择一个Base Image
FROM ubuntu:14.04
# 基本标识 例如作者邮箱
LABEL maintainer="xxxx <xxxx@xxxx.com>"
# 在Base Image上运行命令
RUN apt-get update && apt-get install -y redis-server
# 暴露端口
EXPOSE 6379
# 程序入口
ENTRYPOINT ["/usr/bin/redis-server"]
# 运行Dockerfile -t 指定Image名字 .从当前目录的Dockerfile构建
docker build -t xxxx/redis:latest .
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
- Pull from Registry(从远程仓库拉取)
docker pull ubuntu:14.04
# Image可以从docker Hub找到
# 有两种形式,一种official(官方版),可以直接使用docker pull <ImageName>拉取
# 另一种显示为xxx/xxx,前面是镜像拥有者的名称,后面是镜像名称,可以使用docker pull xxx/xxx拉取
1
2
3
4
5
2
3
4
5
# Dockerfile语法
# FROM
FROM scratch # 制作base image
FROM centos # 使用base image
FROM ubuntu:14.04
# 指定base image 基础镜像
# scratch 表示从头制作一个base image
# 尽量使用官方的base image
1
2
3
4
5
6
7
2
3
4
5
6
7
# LABEL
LABEL maintainer="vanalso@outlook.com"
LABEL version="1.0"
LABEL description="This is description"
# 用于定义Metadata
# 例如作者,版本,描述
# 不可少
1
2
3
4
5
6
7
2
3
4
5
6
7
# RUN
RUN yum update && yum install -y vim \
python-dev # 反斜线换行
# 执行命令并创建新的Image Layer
# 注意:对于image来讲,每执行一次RUN就会生成一个新的Layer(层),为了避免生成无用层,建议多条命令合并为一条命令
1
2
3
4
2
3
4
# WORDKDIR
WORKDIR /root
WORKDIR /test # 如果没有会自动创建目录
WORKDIR demo
RUN pwd # 输出结果应该是/test/demo
# 设定当前工作目录(类似cd改变目录)
# 用WORKDIR,不要用RUN cd
# 尽量使用绝对目录
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# ADD and COPY
ADD hello /
ADD test.tar.gz / # 添加到根目录并解压
WORKDIR /root
ADD hello test/ # /root/test/hello
WORKDIR /root
COPY hello test/
# ADD 和 COPY 功能类似,添加本地文件到image内部
# 区别是 ADD 具有解压缩功能
# 大部分情况,COPY 优于 ADD
# 如需添加远程文件,使用 RUN curl 或 RUN wget
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# ENV
ENV MYSQL_VERSION 5.6 # 设置常量
RUN apt-get install -y mysql-server="${MYSQL_VERSION}" \
&& rm -rf /var/lib/apt/lists/* # 引用常量
# 用来设置常量
# 尽量使用ENV,增加可维护性
1
2
3
4
5
6
2
3
4
5
6
# 技巧
# 免sudo
# 1. 添加docker组(一般情况下已存在)
sudo groupadd docker
# 2. 当前用户加进docker组
sudo gpasswd -a 用户名 docker
# 3. 重启docker
sudo service docker restart
# 4. 重新登陆shell
1
2
3
4
5
6
7
2
3
4
5
6
7
# 相关命令
# 查看本地image列表
sudo docker image ls
1