1 - docker run
sudo docker run -i -t --name dck_v1 ubuntu /bin/bash
sudo docker pull training/webapp
sudo docker run -d -P training/webapp python app.py
- 标志
- -i标志保证容器中STDIN是开启的,
- -t标志告诉Docker为创建的容器分配一个伪tty终端。这样,新创建的容器才能提供一个交互式shell。
- -d让容器在后台运行
- -P将容器内部使用的网络端口映射到我们使用的主机上
- --name重命名
- ubuntu是告诉Docker基于什么镜像来创建容器,unbuntu镜像是一个基础镜像,保存在Docker Hub Registry上
- 当容器创建完毕之后,Docker就会执行容器中的/bin/bash命令
2 - docker commit
docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2
- -m:提交的描述信息
- -a:指定镜像作者
- e218edb10161:容器ID
- runoob/ubuntu:v2:指定要创建的目标镜像名
3 - docker build
cat Dockerfile
FROM centos:6.7
MAINTAINER Fisher "fisher@sudops.com"
RUN /bin/echo 'root:123456' |chpasswd
RUN useradd runoob
RUN /bin/echo 'runoob:123456' |chpasswd
RUN /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE 22
EXPOSE 80
CMD /usr/sbin/sshd -D
- 每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。
- 第一条FROM,指定使用哪个镜像源
- RUN 指令告诉docker 在镜像内执行命令,安装了什么
构建
docker build -t runoob/centos:6.7 .
- -t:指定要创建的目标镜像名
- .:Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径
4 - docker 容器连接
- -P :是容器内部端口随机映射到主机的高端口。
- -p : 是容器内部端口绑定到指定的主机端口。
指令
docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py
docker run -d -P training/webapp python app.py
docker ps
5 - Dockerfile
- FROM 指定基础镜像
- RUN 执行命令
RUN apt-get update
RUN apt-get install -y gcc libc6-dev make
RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-3.2.5.tar.gz"
RUN mkdir -p /usr/src/redis
RUN tar -xzf redis.tar.gz -C /usr/src/redis --strip-components=1
RUN make -C /usr/src/redis
RUN make -C /usr/src/redis install
Dockerfile 中每一个指令都会建立一层,RUN 也不例外。每一个 RUN 的行为,就和刚才我们手工建立镜像的过程一样:新建立一层,在其上执行这些命令,执行结束后,commit 这一层的修改,构成新的镜像。
RUN buildDeps='gcc libc6-dev make' \
&& apt-get update \
&& apt-get install -y $buildDeps \
&& wget -O redis.tar.gz "http://download.redis.io/releases/redis-3.2.5.tar.gz" \
&& mkdir -p /usr/src/redis \
&& tar -xzf redis.tar.gz -C /usr/src/redis --strip-components=1 \
&& make -C /usr/src/redis \
&& make -C /usr/src/redis install \
&& rm -rf /var/lib/apt/lists/* \
&& rm redis.tar.gz \
&& rm -r /usr/src/redis \
&& apt-get purge -y --auto-remove $buildDeps
如果注意,会看到 docker build 命令最后有一个 .。. 表示当前目录,而 Dockerfile 就在当前目录,因此不少初学者以为这个路径是在指定 Dockerfile 所在路径,这么理解其实是不准确的。如果对应上面的命令格式,你可能会发现,这是在指定上下文路径。
- COPY 复制文件
- COPY <源路径>... <目标路径>
- ADD 更高级的复制文件
- CMD 容器启动命令
- ENTRYPOINT 入口点
- ENV 设置环境变量
- ARG 构建参数
- VOLUME 定义匿名卷
- EXPOSE 声明端口
- WORKDIR 指定工作目录
- USER 指定当前用户
- HEALTHCHECK 健康检查
- ONBUILD 为他人做嫁衣裳
网友评论