Docker 可以隔离资源,可以解决安装,拆卸,升级,分发等管理软件的常见问题。
# Docker解决了什么问题:
- 组织有序,隔离一切
- 提高可移植性
- 保护你的机器
# Docker常用名词解释
- 镜像,就像程序中的类,是运行程序的所有文件的捆绑快照,可交付的基本单位,docker pull
- 容器,就像类的实例,是运行的镜像,有自己的参数和数据,可使用的基本单位,docker run|start|stop
- 存储卷,提供容器无关的数据管理方式
- 资源分配,可以限制内存,cpu,设备等
# Docker常用集锦
常用操作
# 获取镜像
docker pull image-name:tag
# 删除镜像
docker image rm image-name|id# 运行容器
docker run --name container-name image-name:tag
# 查看容器
docker ps -a
# 停止容器
docker stop container-name
# 开始容器
docker start container-name
# 查看容器 支持-f,--since 30m,--tail=10
docker logs container-name
# 删除容器
docker rm container-name|id
# 进入容器
docker exec -it container-name bash|sh
常见问题
- 多容器互访,同一机器的不同容器相互访问
通过指定同一网络即可,直接使用network_name:原始端口(非映射端口)
*Docker容器互访三种方式 - 三只松鼠 - 博客园 (cnblogs.com)- 容器改名
docker rename <old_container> <new_container>- 端口映射
docker run -p 宿主端口:内部端口- 文件拷贝
docker cp container-id:container-path host-path- 导入导出
docker save docker-image > file.tar
docker load -i file.tar- 自动重启
docker container update --restart=always
// 失败重启5次
docker run --restart=on-failure:5
关于时区问题
基础镜像,比如alpine,默认时区是UTC,可以通过进入容器,使用date -R查看,国内一般使用UTC+8或者CTS
更改时区的方法:
- 自定义Dockerfile 适合作为基础镜像使用
ENV TZ Asia/Shanghai
RUN apk add tzdata && cp /usr/share/zoneinfo/${TZ} /etc/localtime && echo ${TZ} > /etc/timezone
参考:Docker 处理时区问题 - 简书 (jianshu.com)- 运行时参数
# 设置时区,适合针对已经支持时区的镜像
docker run -e TZ="Asia/Shanghai"
# 同步时区,适合根据宿主环境使用不同时区的情况
docker run -v /etc/localtime:/etc/localtime
参考: docker时区问题-处理方法 - 清风木 - 博客园 (cnblogs.com)
# java特殊处理
ENTRYPOINT ["sh","-c","java ${JAVA_OPTS} -jar -Duser.timezone=GMT+08 app.jar"]
参考: Docker(五):Docker 时区问题_码农农码一生的博客-CSDN博客_docker 时区
常见软件运行参数
nginx
docker run --name some-nginx -v /some/content:/usr/share/nginx/html:ro -d nginx
docker run --name custom-nginx -v /host/path/nginx.conf:/etc/nginx/nginx.conf:ro -d nginxredis
docker run --name some-redis -d redis
docker run -v /myredis/conf:/usr/local/etc/redis --name custom-redis redis redis-server /usr/local/etc/redis/redis.conf
docker run -it --network some-network --rm redis redis-cli -h some-redismysql
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
docker run --name custom-mysql -v /my/custom:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
docker exec -it some-mysql bash详细说明可以访问hub.docker.com查看
彻夜怒肝!Docker 常见疑难杂症解决方案已撸完,快要裂开了。。。 - 知乎 (zhihu.com)