用commit命令创建镜像
先创建一个容器,在容器里做出修改,最后将该容器提交为一个新镜像
创建容器
docker run -it --name test001 ubuntu /bin/bash
修改容器
apt-get install vim
退出容器
exit
提交定制容器
docker commit -m'提交信息' -a'作者信息' 容器ID idktp/myimage:tag # "idktp/myimage:tag"为镜像名称。 # 其中idktp为个人Docker用户名,myimages为要取得仓库名字
推送镜像至docker hub
docker push idktp/myimage:tag
利用Dockerfile构建镜像
创建一个static_web目录用来保存Dockerfile,这个目录就是我们的构建环境(上下文)
mkdir static_web && cd static_web && touch Dockerfile
将以下内容写入Dockerfile
FROM ubuntu:14.04 MAINTAINER idktp RUN apt-get update && apt-get install -y nginx RUN echo 'Hi,i am in your container' >/usr/share/nginx/html/index.html # FROMMAINTAINERRUN 都是Dockerfile指令,还有其他指令一会儿介绍,指令全都大写 # 指令会按从上到下的顺序进行执行,所以需要合理安排指令顺序 # docker从基础镜像运行一个容器。执行一条指令,对容器做出修改。 # 提交修改后的容器,生成新的镜像层。 # 基于新的镜像层生成新的容器,再执行下一条指令。 # 直到指令执行完毕 # 每一个Dockerfile的第一个指令必须是FROM,FROM指定一个已经存在的镜像,后续指令全都基于该镜像 # MAINTAINER:作者信息 # RUN:该指令会在当前镜像中运行指定的命令
构建镜像
docker build -t='idktp/test001:19.07.30' . # 注意命令最后有个点,表明上下文是当前文件夹 # idktp/test001:19.07.30为镜像名
根据新镜像构建容器
docker run -d -p 8080:80 --name static_web idktp/test001:19.07.30 nginx -g 'daemon off;' # -p 代表宿主机的8080端口会绑定容器的80端口,当访问宿主机8080端口时即访问容器的80端口 # -d 表示该容器以分离的模式在后台运行 # 同时需以前运行的方式启动nginx
推送镜像至docker hub
docker push idktp/test001:19.07.30
常用Dockerfile指令
CMD # 容器被启动时要运行的命令,和RUN命令相似,只是RUN是在构建镜像是运行,而CMD是启动容器时运行,而且CMD会被 docker run命令覆盖 ENTRYPOINT # 与CMD类似容器被启动时要运行的命令,但是不会被 docker run命令覆盖 WORKDIR # 为该指令的后面的指令设置工作目录 ADD # 将构建环境下的文件或者目录复制到镜像中
scp root@18.218.205.245:/home/ec2-user/ftp-files/sat1c243119a6494ff7a285658374f978ff/download/2019-12-03/8d96a068b57f47e18aa5b9976d3d81f3.data Desktop