安装 Docker Desktop: https://www.docker.com/products/docker-desktop/ Docker Hub: https://hub.docker.com/
docker1 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 39 40 41 42 # docker image docker pull postgres docker image ls docker image rm image-name # remove image-name docker rmi image-name # remove image-name docker image inspect image-name # start container docker run --name mypgsql -p 5432:5432 -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=password -e POSTGRES_HOST_AUTH_METHOD=password -d postgres # maintain docker ps docker stats CONTAINER docker logs -f CONTAINER dokcer exec -it CONTAINER /bin/sh docker top CONTAINER # docker system docker system df docker builder prune # clean build cache docker container prune # clean unused container # build image docker build -t tagname -f path/to/Dockerfile . # registry docker login docker login registry.gitlab.com # network docker network create -d bridge test-net docker run -itd --name test1 --network test-net ubuntu /bin/bash docker run -itd --name test2 --network test-net ubuntu /bin/bash # save docker save busybox > busybox.tar docker save -o fedora-latest.tar fedora:latest docker save myimage:latest | gzip > myimage_latest.tar.gz # export docker export 1e560fca3906 > ubuntu.tar cat docker/ubuntu.tar | docker import - test/ubuntu:v1
Dockerfile 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 FROM golang:1.18 .0 -buster as builderRUN apt-get update && apt-get install -y --no-install-recommends build-essential \ && rm -rf /var/lib/apt/lists/* COPY . /sources RUN cd /sources && make build FROM debian:buster-slimRUN apt-get update && apt-get install -y --no-install-recommends \ ca-certificates libaio1 \ && rm -rf /var/lib/apt/lists/* COPY --from=builder /sources/bin /usr/local /bin COPY --from=builder /sources/resources /usr/local /resources ENV SOME_ENV="env-value" WORKDIR /usr/local EXPOSE 80 EXPOSE 443 CMD ["/usr/local/bin/my-program" ]
COPY复制指令,从上下文目录中复制文件或者目录到容器里指定路径。
1 COPY hom* /mydir/ COPY hom?.txt /mydir/
ADD 指令和 COPY 的使用格类似(同样需求下,官方推荐使用 COPY)。功能也类似,不同之处如下:
ADD 的优点:在执行 <源文件> 为 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,会自动复制并解压到 <目标路径>。
ADD 的缺点:在不解压的前提下,无法复制 tar 压缩文件。会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。具体是否使用,可以根据是否需要自动解压来决定。
CMD类似于 RUN 指令,用于运行程序,但二者运行的时间点不同:
CMD 在docker run 时运行
RUN 是在 docker build
作用 :为启动的容器指定默认要运行的程序,程序运行结束,容器也就结束。CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。
注意 :如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效。
ENV设置环境变量,定义了环境变量,那么在后续的指令中,就可以使用这个环境变量。
格式:
ENV <key> <value> ENV <key1>=<value1> <key2>=<value2>...
ARG构建参数,与 ENV 作用一致。不过作用域不一样。ARG 设置的环境变量仅对 Dockerfile 内有效。
docker-compose1 2 3 4 5 6 7 8 9 docker-compose -f file.yaml up -d docker-compose -f file.yaml up service_name -d docker-compose -f file.yaml image docker-compose -f file.yaml down docker-compose -f file.yaml [start, stop, restart] service_name docker-compose -f file.yaml config |less # remove deleted service docker-compose -f file.yaml up -d --remove-orphans
Dockfile Example:
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 version 3.7 networks: net-test: name: net-test services: haproxy: networks: - net-test image: haproxy:latest command: | /usr/local/bin/haproxy --set-args-1:value-1 --set-args-2:value-2 --gprc:http://service_a:3366 ports: - "10.0.0.1:1122:1122" - "10.0.0.1:1133:1133" environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: password volmes: - ./config:/usr/local/haproxy/config depends_on: - service_a - service_b service_a: ... service_b: ...
Network Alias 虚拟多个IP地址,将container内的端口绑到独立的IP上,以更真实的方式模拟发布环境。
1 2 3 4 5 6 7 # up ifconfig en0 alias 10.0.0.10 netmask 0xFFFFFFFF up ifconfig en0 alias 10.0.0.11 netmask 0xFFFFFFFF up # down ifconfig en0 10.0.0.10 delete ifconfig en0 10.0.0.11 delete