docker学习

以下操作基于Centos 7.6系统

一、docker安装

yum install -y docker

二、配置docker不需要sudo

如果还没有 docker group 就添加一个:
sudo groupadd docker

将用户加入该 group 内。然后退出并重新登录就生效啦。
sudo gpasswd -a ${USER} docker

重启 docker 服务
sudo service docker restart

切换当前会话到新 group 或者重启 X 会话
newgrp - docker

三、配置官方的中国加速镜像

修改 /etc/docker/daemon.json,加上如下的键值:
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}

重启docker服务
sudo service docker restart

四、Dockerfile基础命令

FROM:指定基础镜像
第一条指令。scratch是虚拟的镜像,表示一个空白的镜像。
示例:
FROM centos:7

ENV:设置环境变量
在其他指令中可以直接引用ENV设置的环境变量。
ENV <key> <value>
ENV <key1>=<value1> <key2>=<value2>...
示例:
ENV TZ=Asia/Shanghai LANG=zh_CN.UTF-8

RUN:执行命令
shell 格式: RUN <命令> ,RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
exec 格式: RUN ["可执行文件", "参数1", "参数2"] 。run可以写多个,每一个指令都会建立一层中间镜像

COPY:复制文本
COPY <源路径>... <目标路径>
COPY ["<源路径1>",... "<目标路径>"]
<源路径> 可以是多个、以及使用通配符,通配符规则满足Go的filepath.Match 规则,如:COPY hom* /mydir/ COPY hom?.txt /mydir/
<目标路径>使用 COPY 指令,源文件的各种元数据都会保留。比如读、写、执行权限、文件变更时间等。

ADD:高级复制文件
ADD ubuntu-xenial-core-cloudimg-amd64-root.tar.gz /
<源路径> 可以是一个 URL ,下载后的文件权限自动设置为 600 。

CMD:容器启动命令
shell 格式: CMD <命令>
exec 格式: CMD ["可执行文件", "参数1", "参数2"...]

ENTRYPOINT:入口点
同CMD,指定容器启动程序及参数。
通过--entrypoint 参数在运行时替换。

用例一:使用CMD要在运行时重新写命令才能追加运行参数,ENTRYPOINT则可以运行时接受新参数。
示例:
FROM ubuntu:16.04
RUN apt-get update
&& apt-get install -y curl
&& rm -rf /var/lib/apt/lists/*
ENTRYPOINT [ "curl", "-s", "http://ip.cn" ]

ARG:构建参数
与ENV不同的是,容器运行时不会存在这些环境变量。
可以用 docker build --build-arg <参数名>=<值> 来覆盖。

VOLUME:定义匿名卷
VOLUME ["<路径1>", "<路径2>"...]
VOLUME <路径>

EXPOSE:暴露端口
EXPOSE <端口1> [<端口2>...]
EXPOSE :EXPOSE 仅仅是声明容器打算使用什么端口而已,并不会自动在宿主进行端口映射。

WORKDIR:指定工作目录
WORKDIR <工作目录路径>
RUN cd /app
RUN echo "hello" > world.txt
两次run不在一个环境内,可以使用WORKDIR。

USER:指定当前用户
这个用户必须是事先建立好的,否则无法切换。
USER <用户名>

HEALTHCHECK:健康检查

最后,通过Dockerfile创建镜像(最后的 . 表示指定镜像构建过程中的上下文环境的目录,并不是指定当前目录下的Dockerfile创建镜像)

docker build -t <REPOSITORY_NAME>:<TAG> .

示例:

docker build -t mongo:3.2 .

原文地址:https://www.cnblogs.com/jianzm/p/11699755.html