Docker

镜像操作:

docker login docker.io

登陆docker

docker search (image-name)

查找

docker pull (image-name)

从远端拉取

docker images (本地镜像)

列出本地镜像

docker tag IMAGEID 别名

命别名

docker push 镜像

提交镜像

删除一个镜像:

docker rmi imageID

通常删除能直接删除没有运行的镜像,但是如果有容器运行这个镜像,删除时可以加-f ,也就是docker rmi -f image-ID强制删除

容器操作命令:

docker ps -a 所有容器列表

docker run 运行

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS说明:

-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;

-d: 后台运行容器,并返回容器ID;

-i: 以交互模式运行容器,通常与 -t 同时使用;

-P: 随机端口映射,容器内部端口随机映射到主机的端口

-p: 指定端口映射,格式为:主机(宿主)端口:容器端口

-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;

--name="nginx-lb": 为容器指定一个名称;

--dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;

--dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;

-h "mars": 指定容器的hostname;

-e username="ritchie": 设置环境变量;

--env-file=[]: 从指定文件读入环境变量;

--cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;

-m :设置容器使用内存最大值;

--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;

--link=[]: 添加链接到另一个容器;

--expose=[]: 开放一个端口或一组端口;

--volume , -v: 绑定一个卷
IMAGE 要运行的镜像
COMMAND 启动容器时要运行的命令

docker start/stop/restrat

docker rm (-f)

docker exec/commit

docker load/save 载入/导出保存 尽量不要用IMAGEID打包

docker log (-f)

docker stats

docker export 导出

Dockerfile规则:

格式:

#为注释

指令(大写) 内容(小写)

指令的大小写并不敏感,但是约定

Docker编排是按照顺序执行Dockerfile的指令合集的

第一个非注释命令一定是FROM ,指定base image,后续命令以这个镜像为基准运行

基准镜像必须是任何可用的镜像文件,docker build将会先找本地images再搜索网络镜像仓库里的镜像文件并下载至本地。

镜像仓库需要注册,设置在/etc/docker/daemon.json中

{
"registry-mirrors": ["https://fl791z1h.mirror.aliyuncs.com"]
}

Dockerfile重要的几个指令:

USER/WORKDIR

docker build -t nginx:user-workdir

ADD/EXPOSE

add添加本地文件到镜像

FROM nginx:1.12.2
ADD index.html /usr/share/nginx/html
EXPOSE 80
docker build -t nginx:add_expose
docker run -P -d nginx:add_expose

RUN/ENV

FROM alpine:3.11.5
ENV product A
RUN touch /opt/a.txt
docker build -t alpine:run_env
docker run -it alpine:run_env /bin/sh

CMD/ENTRYPOINT

都是容器启动的时候运行的
CMD ['/OPT/START.SH']
ENTRYPOINT ['/OPT/START.SH']

docker run -it alpine
docker run -it alpine /bin/bash
都不指定/bin/bash时,两者一样

CMD

支持三种格式

  CMD ["executable","param1","param2"] 使用 exec 执行,推荐方式;

  CMD command param1 param2 在 /bin/sh 中执行,提供给需要交互的应用;

  CMD ["param1","param2"] 提供给 ENTRYPOINT 的默认参数;

指定启动容器时执行的命令,每个 Dockerfile 只能有一条 CMD 命令。如果指定了多条命令,只有最后一条会被执行。

如果用户启动容器时候指定了运行的命令,则会覆盖掉 CMD 指定的命令。

ENTRYPOINT

两种格式:

  ENTRYPOINT ["executable", "param1", "param2"]

  ENTRYPOINT command param1 param2(shell中执行)。

配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。

每个 Dockerfile 中只能有一个 ENTRYPOINT,当指定多个时,只有最后一个起效

从上面的说明,我们可以看到有两个共同点:

都可以指定shell或exec函数调用的方式执行命令;
当存在多个CMD指令或ENTRYPOINT指令时,只有最后一个生效;
而它们有如下差异:

      差异1:CMD指令指定的容器启动时命令可以被docker run指定的命令覆盖,而ENTRYPOINT指令指定的命令不能被覆盖,而是将docker run指定的参数当做ENTRYPOINT指定命令的参数。

      差异2:CMD指令可以为ENTRYPOINT指令设置默认参数,而且可以被docker run指定的参数覆盖;

Dockerfile尽可能不要分太多行,尽可能&&

docker的网络模型:

NAT:默认

None:docker run --net=none

Host:docker run --net=host

container网络(联合网络)docker run --net=container:(container_id)

原文地址:https://www.cnblogs.com/lw-2019forlinuxpython/p/14646060.html