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