Docker 笔记(5)
Docker 笔记(5)
dockerfile 构建

USER / WORKDIR 指令
cd /data/
mkdir dockerfile
cd dockerfile/
vi Dockerfile # 命令全大写,参数小写
FROM 7ing/nginx:curl # 源镜像
USER nginx # 主进程用户名
WORKDIR /usr/share/nginx/html # 工作目录
# . 指的构建本目录下的
[root@localhost docker]# docker build . -t 7ing/nginx:workdir
Sending build context to Docker daemon 2.048 kB
Step 1/3 : FROM 7ing/nginx:curl
---> b3e0205e14f5
Step 2/3 : USER nginx
---> Running in f978a2c43200
---> b766fa7efdf6
Removing intermediate container f978a2c43200
Step 3/3 : WORKDIR /usr/share/nginx/html
---> d3cc110734f6
Removing intermediate container c2cdbb20531d
Successfully built d3cc110734f6
[root@localhost docker]# docker run --rm -ti --name nginx123 7ing/nginx:workdir /bin/bash
nginx@d9687da6f719:/usr/share/nginx/html$ whoami
nginx
nginx@d9687da6f719:/usr/share/nginx/html$ pwd
/usr/share/nginx/html
nginx@d9687da6f719:/usr/share/nginx/html$
ADD / EXPOSE 指令
[root@localhost docker]# vim Dockerfile
FROM 7ing/nginx:curl
ADD index.html /usr/share/nginx/html/index.html # 将本目录下的html文件拷贝到容器的某个地方
EXPOSE 80
[root@localhost docker]# docker build . -t 7ing/nginx:expose
[root@localhost docker]# docker run --rm -it --name nginx234 -P 7ing/nginx:expose /bin/bash # -P 是随机分配一个端口
root@77146d9c9362:/# whoami
root # 默认用户root
root@77146d9c9362:/# pwd
/ # 默认目录是根
root@77146d9c9362:/# nginx -g "daemon off";
[root@localhost html]# netstat -luntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp6 0 0 :::32768 :::* LISTEN 14604/docker-proxy-
RUN / ENV 指令
[root@localhost docker]# vim Dockerfile
FROM centos:7
ENV ver 9.11.4 # 设置环境变量
RUN yum install bind-$VER -y # 在构建镜像的时候,执行可执行命令
[root@localhost docker]# docker build . -t 7ing/nginx:env
[root@localhost docker]# docker run -it --rm 7ing/nginx:env /bin/bash
cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
printenv
VER=9.11.4
CMD / ENTRYPOINT 指令
[root@localhost docker]# vim Dockerfile
FROM centos:7
RUN yum install httpd -y
CMD ["httpd","-D","FOREGROUND"]
[root@localhost docker]# docker build . -t 7ing/nginx:httpd
[root@localhost docker]# docker run -it --rm 7ing/nginx:env /bin/bash
# 进入网页192.168.111.134:83 可以看到Apache启动页面
[root@localhost docker]# vim Dockerfile
FROM centos:7
ADD entrypoint.sh /entrypoint.sh
RUN yum install epel-release -q -y && yum install nginx -y
ENTRYPOINT /entrypoint/sh
[root@localhost docker]# vim entrypoint.sh
#!/bin/bash
/sbin/nginx -g "daemon off;"
# 一定要给执行权限
[root@localhost docker]# chmod +x entrypoint.sh
[root@localhost docker]# docker build . -t 7ing/nginx:entry
[root@localhost docker]# docker run --rm -p 84:80 7ing/nginx:entry
[root@localhost html]# docker exec -ti heuristic_nightingale /bin/bash
[root@8b4aca3bb2f2 /]# cat /entrypoint.sh
#!/bin/bash
/sbin/nginx -g "daemon off;"
[root@8b4aca3bb2f2 /]# ls -l /entrypoint.sh
-rwxr-xr-x. 1 root root 41 Jul 21 07:42 /entrypoint.sh
在运行时可以指定新的命令来替代镜像设置中的这个默认命令,比如,ubuntu 镜像默认的 CMD 是 /bin/bash,如果我们直接 docker run -it ubuntu 的话,会直接进入 bash。我们也可以在运行时指定运行别的命令,如 docker run -it ubuntu cat /etc/os-release。这就是用 cat /etc/os-release 命令替换了默认的 /bin/bash 命令了,输出了系统版本信息。
ENTRYPOINT 的目的和 CMD 一样,都是在指定容器启动程序及参数。ENTRYPOINT 在运行时也可以替代,不过比 CMD 要略显繁琐,需要通过 docker run 的参数 --entrypoint 来指定。
当指定了 ENTRYPOINT 后,CMD 的含义就发生了改变,不再是直接的运行其命令,而是将 CMD 的内容作为参数传给 ENTRYPOINT 指令
综合实验
[root@localhost docker]# vim Dockerfile
FROM 7ing/nginx:curl
USER root
ENV WWW /usr/share/nginx/html
ENV CONF /etc/nginx/conf.d
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime &&\
echo ' Asia/Shanghai' >/etc/timezone
WORKDIR $WWW
ADD index.html $WWW/index.html
ADD demo.od.com.conf $CONF/demo.od.com.conf
EXPOSE 80
CMD["nginx" ,"-g" , "daemon off;"]
[root@localhost docker]# vim demo.od.com.conf
server {
listen 80;
server_name demo.od.com;
root /usr/share/nginx/html;
}
[root@localhost docker]# docker build . -t 7ing/nginx:baidu
[root@localhost docker]# docker run --rm -p 80:80 7ing/nginx:baidu
# 打开运行,输入drivers,打开/etc/hosts,添加
192.168.111.134 demo.od.com
# 打开demo.od.com 即可
Docker的网络模型
NAT

None

Host

联合网络

docker run -ti --rm --name lhwl2 --net=container:原容器ID 7ing/nginx:curl启动容器 /bin/bash
共享网络名称空间

浙公网安备 33010602011771号