# Image

# CentOS安装docker

  1. 卸载本地已有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
  1. 安装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
  1. 安装最新版本的docker
sudo yum install docker-ce docker-ce-cli containerd.io
1
  1. 启动docker
sudo systemctl start docker
1
  1. 运行hello world
sudo docker run hello-world
1

# 什么是Image

  1. 文件(root filesystem)和meta data的集合
  2. 分层的,并且每一层都可以添加改变和删除文件,成为一个新的Image
  3. 不同的Image可以共享相同的layer
  4. Image本身是read-only的
  5. Image只包含rootfs

# 获取Image的方法

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

# 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

# LABEL

LABEL maintainer="vanalso@outlook.com"
LABEL version="1.0"
LABEL description="This is description"

# 用于定义Metadata
# 例如作者,版本,描述
# 不可少
1
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

# WORDKDIR

WORKDIR /root

WORKDIR /test   # 如果没有会自动创建目录
WORKDIR demo
RUN pwd         # 输出结果应该是/test/demo

# 设定当前工作目录(类似cd改变目录)
# 用WORKDIR,不要用RUN cd
# 尽量使用绝对目录
1
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

# 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

# 技巧

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

# 相关命令

# 查看本地image列表

sudo docker image ls
1
最后更新:: 3/12/2024, 3:17:51 PM