一、Dockerfile
在 Docker 中创建镜像最常用的方式,就是使用 Dockerfile。Dockerfile 是一个Docker 镜像的描述文件,我们可以理解成火箭发射的 A、B、C、D…的步骤。Dockerfile 其内部包含了一条条的指令,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。
1. 示例
#基于 centos 镜像
FROM centos
#维护人的信息
MAINTAINER My CentOS <534096094@qq.com>
#安装 httpd 软件包
RUN yum -y update
RUN yum -y install httpd
#开启 80 端口
EXPOSE 80
#复制网站首页文件至镜像中 web 站点下
ADD index.html /var/www/html/index.html
#复制该脚本至镜像中,并修改其权限
ADD run.sh /run.sh
RUN chmod 775 /run.sh
#当启动容器时执行的脚本文件
CMD ["/run.sh"]
官方文档:
https://docs.docker.com/engine/reference/builder/#from
B、复杂一点的示例
#在 centos 上安装 nginx
FROM centos
#标明著作人的名称和邮箱
MAINTAINER xxx xxx@qq.com
#测试一下网络环境
RUN ping -c 1 www.baidu.com
#安装 nginx 必要的一些软件
RUN yum -y install gcc make pcre-devel zlib-devel tar zlib
#把 nginx 安装包复制到/usr/src/目录下,如果是压缩包还会自动解压,是网络路径会自动下载
ADD nginx-1.15.8.tar.gz /usr/src/
#切换到/usr/src/nginx-1.15.8 编译并且安装 nginx
RUN cd /usr/src/nginx-1.15.8 \
&& mkdir /usr/local/nginx \
&& ./configure --prefix=/usr/local/nginx && make && make install \
&& ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ \
&& nginx
#删除安装 nginx 安装目录
RUN rm -rf /usr/src/nginx-nginx-1.15.8
#对外暴露 80 端口
EXPOSE 80
#启动 nginx
CMD ["nginx", "-g", "daemon off;"]
2. 常用指令
类型 | 命令 |
---|---|
基础镜像信息 | FROM |
维护者信息 | MAINTAINER |
镜像操作指令 | RUN、COPY、ADD、EXPOSE、WORKDIR、ONBUILD、USER、VOLUME 等 |
容器启动时执行指令 | CMD、ENTRYPOINT |
二、镜像操作
A、创建项目 dockerfile
FROM java:8
EXPOSE 8080
VOLUME /tmp
ADD target/*.jar /app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-jar","-Xms128m","-Xmx300m","/app.jar","--spring.profiles.active=prod"]
B、上传项目到服务器
C、进入项目,构建镜像到本地仓库
(1)
docker build -t nginx:GA-1.0 -f ./Dockerfile .
别忘了最后的小数点。
(2)
docker images
查看镜像
(3)
docker exec -it 容器 id /bin/bash;
进入容器,修改容器
(4)
docker commit -a “leifengyang” -m “nginxxx” 容器 id mynginx:GA-2.0
①
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
② OPTIONS 说明:
1)
-a
:提交的镜像作者;
2)
-c
:使用 Dockerfile 指令来创建镜像;
3)
-m
:提交时的说明文字;
4)
-p
:在 commit 时,将容器暂停。
(5)
docker login
:登陆到一个 Docker 镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub
①
docker login -u 用户名 -p 密码
(6)
docker logout
: 登出一个 Docker 镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub
D、推送镜像到 docker hub
(1) 标记镜像,
docker tag local-image:tagname username/new-repo:tagname
(2) 上传镜像,
docker push username/new-repo:tagname
E、保存镜像,加载镜像
(1) 可以保存镜像为 tar,使用 u 盘等设备复制到任意 docker 主机,再次加载镜像
(2) 保存:
docker save spring-boot-docker -o /home/spring-boot-docker.tar
(3) 加载:
docker load -i spring-boot-docker.tar
F、阿里云操作
(1) 登录阿里云,密码就是开通镜像仓库时 的密码
docker login --username=qwertyuiopasdf_aa registry.cn-hangzhou.aliyuncs.com
(2) 拉取镜像
docker pull registry.cn-hangzhou.aliyuncs.com/atguigumall/gulimall-nginx:v1.0
(3)推送镜像
docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/atguigumall/gulimall-nginx:v1docker push registry.cn-hangzhou.aliyuncs.com/atguigumall/gulimall-nginx:v1