docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b3b46e8208d3 registry.cn-hangzhou.aliyuncs.com/shuodao/tomcat-8.5.27 "/bin/sh -c '/usr/to…" 9 seconds ago Up 7 seconds 0.0.0.0:80->8080/tcp relaxed_noyce
a 创建文件夹Docker
mkdir Docker
b 创建Dockerfile文件
vi Dockerfile
c 编辑文件并写入
#该镜像的父镜像 为 tomcat 镜像 这样我们就有了tomcat的环境
from registry.cn-hangzhou.aliyuncs.com/shuodao/tomcat-8.5.27
#复制当前文件夹下的 war包 到镜像中tomcat的webapps目录
COPY TestDocker.war /usr/tomcat/webapps
#去除容器内部中文乱码问题
ENV LANG C.UTF-8
d 下载测试包
testDocker.war
e 构建镜像
docker build -t 镜像名称(镜像名称必须为小写):镜像版本 .
docker build -t docker-test:latest .
f 查看镜像
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker-test latest e12f103326ee About a minute ago 386MB
hello-world latest bf756fb1ae65 7 months ago 13.3kB
registry.cn-hangzhou.aliyuncs.com/shuodao/tomcat-8.5.27 latest d07ca8aba782 2 years ago 369MB
g 运行构建的镜像
docker run -d -p 80:8080 docker-test
ed996d2bba530c406a74b401d7e7a8afe5feaf6f273bdafaf67ca50407e721ee
14 Search mirror
docker search debian
15 Common commands
a FROM
用于指定基础images,格式为FROM OR FROM:
Dockerfile都应该以FROM开头,指明以什么images为基础
可以在同一个Dockerfile中多次使用FROM命令用于创建多个镜像
b MAINTAINER
用于指定镜像创建者和联系方式
c COPY
用于复制本地主机内容到容器中
d WORKDIR
用于配合RUN,CMD,ENTRYPOINT 命令设置当前工作路径
可以设置多次,如果是相对路径,则相对前一个WORKDIR命令,
默认路径为/
e RUN
用于容器内部执行命令,每个RUN命令相当于在原有的镜像基础上添加了一个改动层。
原有的镜像不会有变化,例如安装python依赖包,命令为:RUN pip install -r requirements.txt
f EXPOSE
用来指定对外开放的接口,EXPOSE 5000
g ENTRYPOINT
使容器表现的像一个可执行程序一样。一个Dockerfile中只能有一个改命令,如有多个,最后一个生效
h CMD
启动容器时默认执行的命令,该命令可以包含可执行文件,也可以不包含可执行文件
不包含可执行文件时要用ENTRYPOINT指定一个,然后CMD命令的参数就会作为ENTRYPOINT的参数
i ENV
用于在镜像构建过程中设置环境变量
j ADD
用来将构建环境下的文件和目录复制到镜像中
k LABEL
用于为Docker镜像添加元数据
16 Obtaining container log information
docker logs container
17 Enter the container
docker attach container
18 execute commands in the container
docker exec containre command
19 Export image
docker save -o image_name.tar image_name
20 understanding of base image in Docker image
a 不依赖其他镜像,从scratch构建
b 其他镜像可以为之基础进行扩展的
c Linux操作系统由内核空间和用户空间组成
d 内核空间是kernel,Linux刚启动时加载bootfs文件系统给,之后会被卸载掉
e 用户空间的文件系统时rootfs,包含/dev ,/proc, /bin等目录
f 对于base镜像来说,底层直接用host的kernel,自己只需要提供rootfs就行了
g base镜像提供的是最小安装的linux发行版
h Dockerfile内容
FROM scratch
ADD centos-8-x86_64.tar.xz /
LABEL org.label-schema.schema-version="1.0" org.label-schema.name="CentOS Base Image" org.label-schema.vendor="CentOS" org.label-schema.license="GPLv2" org.label-schema.build-date="20200809"
CMD ["/bin/bash"]
i Dockerfile中ADD添加的镜像的tar包就是Centos 7的rootfs,在制作镜像时,该tar包会自动
解压到/目录下,生成/dev, /proc, /bin等目录
j base镜像只是在用户空间与发行版一致,kernel版本与发行版是不同的。例如 CentOS 7 使用 3.x.x 的 kernel,如果 Docker Host 是 Ubuntu 16.04(比如我们的实验环境),那么在 CentOS 容器中使用的实际是是 Host 4.x.x 的 kernel
k 容器只能使用 Host 的 kernel,并且不能修改。所有容器都共用 host 的 kernel,在容器中没办法对 kernel 升级。如果容器对 kernel 版本有要求(比如应用只能在某个 kernel 版本下运行),则不建议用容器,这种场景虚拟机可能更合适。
21 Make your own basic image in docker (not verified)
a 本地镜像
-把自己的开发环境打包,取名为centos6-base.tar,然后在docker中,以centos6-base.tar作为基础镜像
-创建自己的 镜像,放置于/root目录下
#tar --numeric-owner --exclude=/proc --exclude=/sys -cvf centos6-base.tar /
会生成打包文件centos6-base.tar文件
-将制作的centos导入,并命名为centos6-base
#cat centos6-base.tar | docker import - centos6-base
-现在可以运行它并测试查看内核
#docker run -i -t centos6-base cat /etc/redhat-release
b 本地目录
-假设把centos-base.tar放在/opt目录里
sudo tar -C . | docker import - /opt
c 远程镜像
sudo docker import http://example.com/exampleimage.tgz
docker save logmanager:1.0 > logmanager.tar or
docker save 131242bf3ee -o /root/dockerfile/my.tar
26 Load the tar package into an image
docker load < my.tar or
docker load -i my.tar
27 docker container image packaging tar package-save the image on the current container for packaging, and use it on another service
a 命令:docker commit -a "dhd" -m "test" 8fd2108e1e90 hellp-world-test:v20200824
b 打包:docker save -o tmf-hello-world20200824.tar hellp-world-test:v20200824
c 部署升级:docker load -i tmf-hello-world20200824.tar
d 镜像打标签,目的是将导入的镜像归到某个镜像仓库里
docker tag tmp-web:v20200824 docker.oa.com:8080/tmf/tmf_web:v20200824
e 将镜像推送到仓库
docker push docker.oa.com:8080/tmf/tmf_web:v20200824