Docker 安装
官方网站可以下载:也可以到阿里云镜像下载
docker-ce-18.09.6-3.el7.x86_64.rpm
containerd.io-1.2.5-3.1.el7.x86_64.rpm docker-ce-cli-18.09.6-3.el7.x86_64.rpm
container-selinux-2.21-1.el7.noarch.rpm
yum install * -y #安装这四个包
systemctl start docker
systemctl enable docker #开机自启
docker load -i game2048 #倒入镜像
docker history game2048:latest #打包的分层构建历史
docker run -d --name game1 -p 80:80 game2048 #运行容器
docker images #查看所有的镜像
Docker 配置文件
添加ubuntu.tar镜像
docker run -it --name vm1 ubuntu #--it交互运行镜像
共享主机的内核
构建镜像
加载镜像
查看镜像
Ctrl+d #退出容器
docker start vm1 #启动容器
docker attach vm1 #连接容器
ctrl+p+q #不直接退出后台运行
docker commit vm1 test:v1 #提交镜像
docker images #查看
查看构建历史
docker rm -f vm1 #强制删除正在运行的容器
docker run -it --name vm1 test:v1 #运行自己提交的镜像
写入的数据全部都在
Dockerfile构建镜像
编辑文件
docker build -t test:v2 . #获取dockerfile的数据
1,COPY 用法
docker history test:v1 #查看构建历史
docker run -it --name vm1 test:v1 #运行容器
2,ADD的用法
ADD的用法类似与COPY但是ADD可以自动解压文件
EXPOST 如果容器中运行服务,可以把务府的端口暴露出去
3,VOLUME 声明数据卷,指定数据的挂载
docker inspect vm2
写入数据在宿主机/var/lib/docker/volumes/bcf893c629faeae0629e5233bf2b5d73925d539a23cea2e2e8642e51817f69f1/_data 在容器里面查看相当于自动挂载
docker run -it --name vm3 -v /opt/data:/data test:v2 #手动挂在共享目录
4,WORKDIR用法
WORKDIR 相当于cd命令 不存在会自动创建
RUN 在容器中运行命令并创建的新的镜像层,常用于安转软件包
CMD 和 ENTRYPOINT 都是用于设置容器启动后执行命令,但CMD会被docker run 后面的命令进行覆盖,而ENTRYOINT不会被忽略,一定会被执行
Docker run 后面的参数可以传递给ENTRYPOINT指令当作参数;
Dokerfile中只能指定一个ENTRYPOINT,如果指定多个,只有最后一个生效
vim dockerfile
docker build -t test:v3 #构建镜像
docker run --rm test:v3 #运行一次自动删除
ENTRYPOINT格式
CMD提供额外参数
镜像的优化
编辑dockerfile
FROM rhel7
EXPOSE 80
MAINTAINER haha@westos.org
COPY hh.repo /etc/yum.repos.d/
RUN rpmdb --rebuilddb
RUN yum install -y gcc make pcre-devel zlib-deve
ADD nginx-1.16.0.tar.gz /mnt
WORKDIR /mnt/nginx-1.16.0
RUN ./configure --prefix=/usr/local/nginx
RUN make
RUN make install
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]
Docker build -t naginx:v1 #构建镜像
Docker images #查看镜像
清理中间产物:
FROM rhel7
EXPOSE 80
MAINTAINER haha@westos.org
COPY hh.repo /etc/yum.repos.d/
RUN rpmdb --rebuilddb
RUN yum install -y gcc make pcre-devel zlib-deve && yum clean all
ADD nginx-1.16.0.tar.gz /mnt
WORKDIR /mnt/nginx-1.16.0
RUN ./configure --prefix=/usr/local/nginx
RUN make
RUN make install
RUN rm -fr /mnt/nginx-1.16.0
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]
Docker build -t naginx:v2 #构建镜像
Docker images #查看镜像
减少层数:
减少层数:
FROM rhel7
EXPOSE 80
MAINTAINER haha@westos.org
COPY hh.repo /etc/yum.repos.d/
ADD nginx-1.16.0.tar.gz /mnt
WORKDIR /mnt/nginx-1.16.0
RUN rpmdb --rebuilddb && yum install -y gcc make pcre-devel zlib-devel && yum clean all && ./configure --prefix=/usr/local/nginx && make && make install && rm -fr /mnt/nginx-1.16.0
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]
Docker build -t naginx:v3 #构建镜像
Docker images #查看镜像
多阶段构建镜像:
FROM rhel7 as build
EXPOSE 80
MAINTAINER haha@westos.org
COPY hh.repo /etc/yum.repos.d/
ADD nginx-1.16.0.tar.gz /mnt
WORKDIR /mnt/nginx-1.16.0
RUN rpmdb --rebuilddb && yum install -y gcc make pcre-devel zlib-devel && yum clean all && ./configure --prefix=/usr/local/nginx && make && make install && rm -fr /mnt/nginx-1.16.0
FROM rhel7
EXPOSE 80
MAINTAINER haha@westos.org
VOLUME ["/usr/local/nginx/html"]
COPY --from=build /usr/local/nginx /usr/local/nginx
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]
Docker build -t naginx:v4 #构建镜像
Docker images #查看镜像
选择最精简的基础镜像可以进一步缩减新建镜像的大小