Docker 笔记(5)

Docker 笔记(5)

dockerfile 构建

image-20210720173011821

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

image-20210721162629731

None

image-20210721163617304

Host

image-20210721163711079

联合网络

image-20210721163644049

docker run -ti --rm --name lhwl2 --net=container:原容器ID 7ing/nginx:curl启动容器 /bin/bash

​ 共享网络名称空间

posted @ 2021-07-21 16:48  7ing  阅读(57)  评论(0)    收藏  举报