Docker 镜像制作:commit、导出导入与启动命令
直接回答 :临时改动用 docker commit 保存成镜像,离线环境用 docker save 和 docker load 搬镜像;容器启动后立刻退出,通常是因为 Dockerfile 里的启动命令不是前台运行的常驻进程。
保存、导出与导入镜像 1、保存镜像
1 docker commit 容器ID 镜像名称:版本
2、导出镜像
1 docker save -o 打包的名称.tar 镜像名称:版本
3、倒入镜像
1 docker load -i ./打包的名称.tar
4、运行镜像
1 docker run -p 9014:9014 --name="容器名字" 镜像名称:版本 /usr/local/sbin/run.sh
1 docker run -p 9014:9014 -v /opt/sf6DockerDir:/opt -p 5101:5101 -p 5102:5102 -p 5103:5103 -e TZ="Asia/Shanghai" --name='sf6' sf6image:1.0.0 /usr/local/sbin/run.sh &D
成都运行命令
1 sudo docker run -p 9014:9014 -v /opt/dockerFiles:/opt -p 9011:9011 -e TZ="Asia/Shanghai" --name='sf6' cddockerimg:1.0.0 /usr/local/sbin/run.sh &
如果镜像已经运行起来,需要更改某些配置,可以使用
1 docker update --restart=always 容器名字
两个真实项目的 Dockerfile 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 FROM ubuntuWORKDIR /home/www ADD ./netcore3/aspnetcore-runtime-3.1.27-linux-x64.tar.gz /etc/dotnet COPY ./apt/sources.list /etc/apt/sources.list ENV TZ=Asia/ShanghaiRUN apt update && apt -y install nginx && apt -y install vim && apt -y install supervisor && ln -s /etc/dotnet/dotnet /bin && apt -y install libgdiplus EXPOSE 9014 ENTRYPOINT ["supervisord" ,"-n" ,"-c" ,"/etc/supervisor/supervisord.conf" ]
1 2 3 4 5 6 7 8 9 10 FROM environment:1.0 .0 WORKDIR /home/www RUN apt -y install vim COPY ./apiService/opt /opt/ COPY ./apiService/supervisord.d/* /etc/supervisor/conf.d/ COPY ./nginx/* /etc/nginx/conf.d COPY ./web ./rlx_sf6/ EXPOSE 9014 VOLUME ["/opt/SF6Mgmt/StaticFiles/" ,"/opt/IdentityServer/Log/" ,"/opt/SF6Mgmt/Log/" ,"/opt/SF6Trans/Log/" ] ENTRYPOINT ["supervisord" ,"-n" ,"-c" ,"/etc/supervisor/supervisord.conf" ]
docker-compose.yml
1 2 3 4 5 6 7 8 9 10 11 version: '2' services: sf6: image: sf6:1.0 .0 ports: - '9014:9014' volumes: - /opt/JiangSu.SF6Mgmt/StaticFiles/:/opt/JiangSu.SF6Mgmt/StaticFiles/ container_name: sf6 restart: always
go程序制作成镜像
1 2 3 4 5 6 7 FROM scratchWORKDIR /app COPY WechartAPI_linux . COPY config.json . COPY ca-certificates.crt /etc/ssl/certs/ EXPOSE 8000 CMD ["./WechartAPI_linux" ]
让容器启动就跑指定程序 下面是关于docker打包镜像,怎么才能让他容器启动的时候启动指定程序,运行起来后也不会exit(0)退出错误
dockerfiles文件
1 2 3 4 FROM ubuntujexus:1.0 .6 ADD init.sh . RUN chmod +x init.sh ENTRYPOINT ["./init.sh" ]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ```sh #!/bin/bash ## Stop your services function stop_svc { /var/jexus/jws stop >/dev/null 2>&1 exit } ## Set the SIGTREM signal response function trap 'stop_svc' SIGTERM ## Start Your Services ##################### /var/jexus/jws start ## Waiting signal #################### while true do sleep 2 done
这篇笔记整理自我自己的实践记录,如果做法有出入,或者你踩过别的坑,欢迎到 留言板 一起聊聊。