Dockerfile
Dockerfile是Docker构建镜像的文本文件,常用的指令如下,其中错误的指令会被忽略
常用的指令:
FROM,提供base镜像
ENV,k=v设置容器内环境变量,后续可通过$k引用
COPY,COPY <src> <dest>
RUN,分为两种格式:
1.RUN <command>(shell格式,推荐)
2.RUN [“command”, “param1”, “param2”](exec格式)
exec格式不会在shell中执行,Docker会解析为JSON数组,所以要满足JSON格式双引号,但是却无法使用之前设置的ENV
CMD,CMD为容器运行时执行的默认命令,推荐exec格式,可以有多个CMD
EXPOSE,EXPOSE PORT1 PORT2指定容器暴露端口
ADD,ADD <src> <dest> ,其中src支持网络URL文件资源,src会对归档文件直接解压到dest中
不常用的指令:
ENTYPOINT
VLOUME
USER
WORKDIR
ONBUILD
Dockerfile最佳实践
1.使用-t指定新镜像名称
2.base镜像最好使用官方镜像库中,镜像大小:busybox<debian<centos<ubuntu
3.base镜像要指定tag
4.CMD如果命令较多可以在容器中写入一个脚本,启动命令这样写CMD ["/run.sh"]
5.正确使用ADD与RUN
6.RUN可以通过&&符号来执行多个命令,使用换行符\来换行更加清晰
7.RUN时可以通过wget等将文件下载到缓存镜像层中
8.一个Docker可以写多个FROM,来实现从中间环境中进行构建,产出的数据COPY到一个alpine的镜像的过程
[root@hw-server build]# ls
123.txt 456.txt 789.txt CentOS7-Base-163.repo Dockerfile
[root@hw-server build]# docker build -t mytest:v1 .^C
[root@hw-server build]# cat Dockerfile
FROM centos:7.7.1908 as centos-base
ENV NAME=quguanwen
ENV FROM=cd
COPY *.txt /tmp/
RUN mkdir -p /tmp/test && \
touch /tmp/test/$NAME.conf && \
rm -rf /etc/yum.repos.d/* && \
yum list docker-ce --showduplicates | sort -r | tee /tmp/test/repo.log && \
echo "/bin/bash" > /tmp/test/run.sh
COPY CentOS7-Base-163.repo /etc/yum.repos.d/
RUN yum -y install wget && wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
WORKDIR /tmp/test
FROM nginx:latest
COPY --from=centos-base /tmp/test/* /tmp/
EXPOSE 80
RUN chmod +x /tmp/run.sh
CMD ["/tmp/run.sh"]
常用命令
1.构建镜像
docker commit [OPTIONS] CONTAINER
docker build -t [REPOSITORY[:TAG]] PATH
2.推拉镜像
docker login(logout) --username=qgwssg registry.cn-hangzhou.aliyuncs.com
docker pull NAME[:TAG|@DIGEST]
docker push NAME[:TAG|@DIGEST]
本地的账号bas64编码存在cat /root/.docker/config.json下
3.获取Docker详情
包括节点运行容器情况,版本,存储,Plugin等等
docker info
4.检查信息
容器的create时间、ID、CMD、State、驱动、Mount、rootfs、network等等
docker inspect containerID
镜像的关联的容器、Os、大小等等与容器类似
docker inspect imageID
5.检查镜像历史操作
docker history imageID
6.容器宿主机间文件拷贝
docker cp 宿主机文件 containerID:目录
docker cp containerID:目录/文件 宿主机目录
7.容器执行命令
docker exec -it containerID sh|bash
docker exec containerID ls /etc/
8.容器监控日志
docker stats containerID
docker logs --since=10m -f containerID
9.容器状态控制
docker start containerID
docker restart containerID
docker stop containerID
docker rm -f containerID
docker kill containerID
10.镜像分发
docker tag NAME[:TAG|@DIGEST] NAME[:TAG|@DIGEST]
docker save NAME[:TAG|@DIGEST] > nginx.tar
docker load < nginx.tar
11.运行容器(常用)
docker run --name nfs-server -d --restart=always -m 250M --memory-swap 1G
-v /home/nfsdir:/nfs
-e NFS_EXPORT_DIR_1=/nfs
-e NFS_EXPORT_DOMAIN_1=*
-e NFS_EXPORT_OPTIONS_1=rw,insecure,no_subtree_check,no_root_squash,fsid=1
-p 111:111 -p 111:111/udp
-p 2049:2049 -p 2049:2049/udp
-p 32765:32765 -p 32765:32765/udp
-p 32766:32766 -p 32766:32766/udp
-p 32767:32767 -p 32767:32767/udp
fuzzle/docker-nfs-server:latest
(–network=hosts 设置与宿主机同一个network namespaces)