1.镜像
1.查看镜像:docker images
2.删除镜像(如果有容器引用该镜像则无法删除):docker rmi 镜像ID
3.导出镜像:docker save -o 镜像名.tar 镜像ID
4.导入镜像:docker load -i 镜像名.tar
5.把容器保存为镜像:docker commit 容器名 镜像名
2.构建镜像
以一个web应用nplm为例,来构建一个web应用的镜像并运行。
1.将web应用导出war包nplm.war
(本次使用的镜像tomcat:8.5.15-jre8打包项目时端口号要用8080 负责外部无法访问)
2.编写Dockerfile:
FROM tomcat:8.5.15-jre8
RUN rm -rf webapps/ROOT && mkdir webapps/ROOT
ADD nplm.war /app.zip
COPY ./simsun.ttc /usr/share/fonts
RUN cd webapps/ROOT && unzip /app.zip && rm -rf /app.zip
<!--
//FROM的意思根据那个基础镜像构建镜像,我们根据tomcat:8.5.15-jre8镜像构建,里面有tomcat
//ADD nplm.war /app.zip是把nplm.war加入到镜像内并命名为app.zip
//因为该web应用需要用到一些镜像内没有的字体,所以把当前目录的字体文件simsun.ttc复制到镜像/usr/share/fonts下
//cd webapps/ROOT && unzip /app.zip 把应用解压到了镜像的webapps/ROOT目录下
-->
3.docker build构建镜像
现在当前目录有nplm.war、Dockerfile、simsun.ttc(字体文件)三个文件,运行docker build命令构建镜像
docker build -t nplm .
<!--
该命令会自动到当前所在目录寻找Dockerfile文件,并执行该文件构建镜像并命名为nplm
-->
3.docker run运行容器
还以上面的nplm镜像为例,要运行该镜像
docker run -p 18092:18092 --name nplm -v /home/sdhj/container_nplm_mount:/usr/local/container_nplm_mount -d nplm
<!--
//-p表示将容器的18092端口映射到宿主机的18092端口,这样通过宿主机的18092端口就可以访问该web应用
//-v表示文件映射,将宿主机的home/sdhj/container_nplm_mount目录和容器内/usr/local/container_nplm_mount目录相映射,这样如果容器删除了,该目录下的数据还能保留在宿主机的映射目录中
//-d应该是表示后台运行
-->
<!--运行mysql5.7示例:
docker run --name mysql5.7 -p 3306:3306 -e TZ=Asia/Shanghai -e MYSQL_ROOT_PASSWORD=123456
-v /home/sdhj/container_mysql5_mount/data:/var/lib/mysql
-v /home/sdhj/container_mysql5_mount/sql:/docker-entrypoint-initdb.d
-v /home/sdhj/container_mysql5_mount/config/my.cnf:/etc/mysql/my.cnf
--restart=always -d mysql:5.7.32
-->
4.容器操作
1.文件复制
把容器内文件拷贝到宿主机:
docker cp 容器:文件路径 起一个文件名
把宿主机文件复制到容器内:
docker cp 本地文件名 容器ID:目录
<!-- 例如docker cp nplm.sql 886eb68e3d55:/sql/ -->
2.查看容器日志
docker logs -f 容器ID
根据时间范围查看并导出到log文件:
docker logs -t --since="2021-11-24T14:00:00" --until "2021-11-24T18:00:00" 容器ID >log
3.查看容器
docker ps
docker ps -a <!--查看所有容器-->
docker inspect 容器名 <!--查看容器的全部信息-->
4.删除容器
docker rm 容器ID
5.进入容器
进入容器并且使用utf-8编码:
docker exec -it 容器ID env LANG=C.UTF-8 bash