02-K8S-Basic
01 Docker Basic

Docker 安装

安装依赖

Terminal
yum install -y yum-utils device-mapper-persistent-data lvm2

添加 Docker yum 源

Terminal
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-
ce/linux/centos/docker-ce.repo
    sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d'
/etc/yum.repos.d/CentOS-Base.repo

安装 docker-ce

Terminal
yum install docker-ce-20.10.* docker-ce-cli-20.10.* -y

docker 自启动

Terminal
systemctl daemon-reload && systemctl enable --now docker

Version & Info

查看 docker 版本

Terminal
docker version
Output
Client: Docker Engine - Community
 Version:           20.10.24
 API version:       1.41
 Go version:        go1.19.7
 Git commit:        297e128
 Built:             Tue Apr  4 18:22:57 2023
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.24
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.19.7
  Git commit:       5d6db84
  Built:            Tue Apr  4 18:21:02 2023
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.22
  GitCommit:        8165feabfdfe38c65b599c4993d227328c231fca
 runc:
  Version:          1.1.8
  GitCommit:        v1.1.8-0-g82f18fe
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

查看 Docker 详细信息

Terminal
docker info
Output
Client:
 Context:    default
 Debug Mode: false
 Plugins:
  app: Docker App (Docker Inc., v0.9.1-beta3)
  buildx: Docker Buildx (Docker Inc., v0.10.4-docker)

Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 0
 Server Version: 20.10.24
 Storage Driver: overlay2 # 存储驱动,一般为 overlay2,性能好速度快,其他驱动 aufs、overlay、brtfs
  Backing Filesystem: xfs # 服务器文件系统
  Supports d_type: true # 目录条目类型,用来表示一个文件是文件、管道还是套接字。在格式化 xfs 文件系统时,必须指定 ftype=1
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file # 日志驱动,json-file 表示存在本地
 Cgroup Driver: cgroupfs # 限制和隔离的驱动,生产环境建议使用 systemd
 Cgroup Version: 1
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog # Docker 支持的日志驱动
 Swarm: inactive # Docker 官方的容器编排工具,inactive 不开启,active 开启
 Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 8165feabfdfe38c65b599c4993d227328c231fca
 runc version: v1.1.8-0-g82f18fe
 init version: de40ad0
 Security Options:
  seccomp
   Profile: default
 Kernel Version: 3.10.0-1160.71.1.el7.x86_64
 Operating System: CentOS Linux 7 (Core)
 OSType: linux
 Architecture: x86_64
 CPUs: 2
 Total Memory: 962.8MiB
 Name: ip-192-168-0-243.cn-northwest-1.compute.internal
 ID: 32R5:YIG4:Z3PG:2IVC:S5AE:LQGB:IATI:6YSO:TA33:54G5:OLNZ:KPAA
 Docker Root Dir: /var/lib/docker # Docker 根目录,生产环境建议使用 SSD 硬盘,或者独立的磁盘,不要和系统盘用同一个磁盘。
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Live Restore Enabled: false # Docker 热更新,生产环境建议设置为 true

Image Operation

Search Image

Terminal
docker search nginx
Output
NAME                                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
nginx                                             Official build of Nginx.                        18977     [OK]       
bitnami/nginx                                     Bitnami nginx Docker Image                      172                  [OK]
nginxproxy/acme-companion                         Automated ACME SSL certificate generation fo…   123                  
nginxinc/nginx-unprivileged                       Unprivileged NGINX Dockerfiles                  118                  
nginxproxy/nginx-proxy                            Automated Nginx reverse proxy for docker con…   102                  
ubuntu/nginx                                      Nginx, a high-performance reverse proxy & we…   98                   
nginx/nginx-ingress                               NGINX and  NGINX Plus Ingress Controllers fo…   76                   
nginx/unit                                        NGINX Unit is a dynamic web and application …   64                   
nginx/nginx-prometheus-exporter                   NGINX Prometheus Exporter for NGINX and NGIN…   33                   
bitnami/nginx-ingress-controller                  Bitnami Docker Image for NGINX Ingress Contr…   29                   [OK]
nginxproxy/docker-gen                             Generate files from docker container meta-da…   12                   
rancher/nginx-ingress-controller                                                                  11                   
unit                                              Official build of NGINX Unit: Universal Web …   10        [OK]       
kasmweb/nginx                                     An Nginx image based off nginx:alpine and in…   6                    
nginxinc/ingress-demo                             Ingress Demo                                    4                    
nginxinc/nginx-s3-gateway                         Authenticating and caching gateway based on …   2                    
rancher/nginx-ingress-controller-defaultbackend                                                   2                    
nginx/nginx-quic-qns                              NGINX QUIC interop                              1                    
nginxinc/amplify-agent                            NGINX Amplify Agent docker repository           1                    
nginxinc/nginmesh_proxy_debug                                                                     0                    
nginx/nginx-ingress-operator                      NGINX Ingress Operator for NGINX and NGINX P…   0                    
nginxinc/mra-fakes3                                                                               0                    
nginxinc/ngx-rust-tool                                                                            0                    
nginxinc/mra_python_base                                                                          0                    
nginxinc/nginmesh_proxy_init                                                                      0  

Pull Image

Terminal
docker pull nginx
Terminal
docker pull nginx:1.15

List Image

Terminal
docker images | grep nginx-v2

Re-tag

Terminal
docker tag nginx joachim/nginx:test
Terminal
docker images | grep joachim

Login Registry

Terminal
docker login

Push Image

Terminal
docker push joachim/nginx:test

Delete Images

Terminal
docker rmi 7ad745acca31 00f40cc9b7f6 9b0f2f308931 c3d2357e9cbd 97c97cee03f9

Image History

Terminal
docker history 0e55626662ef

Container Operation

Run Container

前台启动

Terminal
docker run -ti nginx bash

后台启动 -d

Terminal
docker run -tid nginx bash

自动重启

Terminal
docker run -tid --restart=always nginx bash 

Port Mapping

Terminal
docker run -ti -p 30001:80 nginx bash

Log

Terminal
docker logs -f [containerID|containerName] --tail 1

Volume Mount

Terminal
docker run -ti -p 30001:80 -v /etc/hosts:/etc/hosts nginx

List Container

Running Container

Terminal
docker ps

ALL (include QUIT)

Terminal
docker ps -a

only Container ID

Terminal
docker ps -q
Terminal
docker ps -aq

Container Info

Terminal
 docker inspect 1de2ef08945f 

Delete Container

Terminal
docker rm 600e5da5c196 5a1848d923a1 280fc86494f1

Exec

Terminal
docker exec -ti 86b1c069024b bash

DockerFile Operation

Build Image

Terminal
docker build -t image_name:image_tag .

Keywords Index

ITEMCONTENTExample
FROM继承基础镜像FROM centos:7
MAINTAINER镜像制作作者的信息,已弃用,使用LABEL替代MAINTAINER dot
LABELk=v形式,将一些元数据添加至镜像LABEL maintainer="dot" version="demo"
ENV配置环境变量
USER容器使用的用户
WORKDIR设置容器的工作目录
ADD复制文件到容器,一般拷贝文件,压缩包自动解压
COPY复制文件到容器,一般拷贝目录
RUN用来执行shell命令RUN useradd dot
EXPOSE暴露端口号
CMD启动容器默认执行的命令,会被覆盖
ENTRYPOINT启动容器真正执行的命令,不会被覆盖
ARG设置编译镜像时传入的参数

Ex: create user

Dockerfile
FROM centos:7 
MAINTAINER dot 
RUN useradd dot
Terminal
docker build -t centos:user .

Switch User

Dockerfile
FROM centos:7
RUN useradd -m tomcat -u 1001
USER 1001

Ex: Add ENV

Dockerfile
FROM centos:7
MAINTAINER dot
RUN useradd dot
RUN mkdir dot
ENV envir=test version=1.0
CMD echo "envir:$envir version:$version"
Terminal
docker build -t centos:env-cmd .
docker run centos:env-cmd

Ex: Entrypoint

Dockerfile
FROM centos:7
MAINTAINER dot
RUN useradd dot
RUN mkdir dot
ENV envir=test version=1.0
ENTRYPOINT echo "envir:$envir version:$version"
Terminal
docker build -t centos:entrypoint .
docker run --rm centos:entrypoint

CMD & ENTRYPOINT

覆盖 CMD:

Terminal
docker run --rm centos:env-cmd echo "cover..."

覆盖 ENTRYPOINT (--entrypoint)

Terminal
docker run --rm --entrypoint=ls centos:entrypoint /tmp

ADD & COPY

ADD 自动解压

Dockerfile
FROM nginx
MAINTAINER dot
ADD ./index.tar.gz /usr/share/nginx/html/
WORKDIR /usr/share/nginx/html

COPY 不自动解压

Dockerfile
FROM nginx
MAINTAINER dot
WORKDIR /usr/share/nginx/html
COPY webroot/ .

Dockerfile Dynamic Arguments

Dockerfile
FROM centos:7
LABEL maintainer="dot" version="demo"
LABEL multiple="true"
ARG USERNAME
ARG DIR="defaultValue"
RUN useradd -m $USERNAME -u 1001 && mkdir $DIR
Terminal
docker build --build-arg USERNAME="test_arg" -t test:arg .

Multi-Stage Build

Dockerfile
FROM golang:1.14.4-alpine as builder 
WORKDIR /opt
COPY hello.go /opt
RUN go build /opt/hello.go
 
FROM scratch
COPY --from=builder /opt/hello .