衷于栖
  • 衷于栖
  • 首页
  • 归档
  • 关于

Image
Profile Picture

衷于栖

自由开发者

分类目录

三维技术4 介绍2 应用1 异常1 技术笔记17 游戏2 源码解读3 管理5 读书笔记3 车联网3 转载11 随笔3

热门标签

  • GIT
  • 工作流指南
  • docker
  • SCRUM
  • JT808
  • 百度地图
  • 狼人杀
  • 模型数据结构
  • 敏捷
  • 扩展
  • 学习WEBGL系列
  • 可维护
  • GlTF
  • CentOS
  • 高德地图
  • 集中式
  • 郭麒麟
  • 郭德纲
  • 进阶
  • 路由节点编辑器

微信订阅

Image

友情链接

王海达博客 Steve Yegge Debug 客栈 Codelei's Blog 笛卡尔积 Java九点半课堂 薛定喵君

【docker】【一】docker基础

2018-08-18     技术笔记


本文是记录常用的docker命令的笔记,尽量使用简单的文字介绍docker命令。所有操作仅在CENTOS7上测试过,但是docker命令是通用的,不同的是配置文件目录位置或者系统命令。

docker 镜像相关

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 直接从docker hub镜像源下载镜像
docker pull <镜像名称>
e. docker pull mysql:5.6.40
# 列出镜像信息
docker images
# 添加镜像标签,实际上镜像标签指向的是原镜像文件
docker tag <镜像名称> <tag名称>
e. docker tag ubuntu:latest myubuntu:latest
# 获取镜像所有信息
docker inspect <镜像名称>
# 查看镜像历史
docker history <镜像名称>
# 搜所镜像
docker search <搜索名称>
e. docker search -s 3 nginx # 星级3以上的镜像
# 删除镜像
docker rmi <镜像标签或者ID>
e. docker rmi myubuntu:latest # 不会删除 ubuntu:latest 原始镜像
e. docker rmi -f myubuntu:latest # 强行删除
# 创建镜像
docker commit <容器标签或者ID>
e.docker commit -a "作者" -m "这是一个, 提交消息" <容器ID> <新的镜像名以及标签>
# 操作系统模板导入,可以直接从OPENVZ模板导入。
# http://open-vz.org/Download/templates/precreated
docker import <文件名>
e. cat ubuntu-14.04-x86_64-minimal.tar.gz | docker import - ubuntu:14.04
# 存出和导入镜像
docker save -o <存出文件名> <镜像名称>
e. docker save -o ubuntu_14.04.tar ubuntu:14.04
docker load --input <导入文件名>
docker load < <导入文件名>
e. docker load --input ubuntu_14.04.tar
e. docker load < ubuntu_14.04.tar
# 上传镜像
docker push <镜像标签或者ID>

docker 容器相关

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 创建一个容器,容器创建后处于停止状态
docker create -it <镜像名称>
# 启动容器
docker start <容器名称或者ID>
# 新建并启动容器
docker run -it ubuntu /bin/bash # 交互
docker run -d ubuntu /bin/echo 'Hello World' # 后台运行
# 终止运行
docker stop <容器名称或者ID>
docker kill <容器名称或者ID> # 强行终止
# 重启容器
docker restart <容器名称或者ID>
# 进入容器
docker attach <容器名称或者ID> # 这样进入容器,多个终端时候会同步显示
docker exec -it <容器名称或者ID> /bin/bash # 推荐使用的方式
# 使用nsenter进入容器
nsenter --target <pid> --mount --uts --ipc --net --pid
# 删除容器
docker rm <容器名称或者ID>
e. docker rm -f abc # 强制删除
e. docker rm -l abc # 删除容器链接,但是保留容器
e. docker rm -v abc # 删除容器挂载的容器卷
# 导入导出容器
docker export -o <导出文件> <导出容容器名称或者ID>
docker import <导入文件> - test/ubuntu:v1.0

docker 私有仓库相关

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 搭建本地私有仓库,默认会把仓库文件存放在 `/tmp/registry` 可以通过-v挂载,把文件存储在本地
docker run -d -p 5000:5000 registry
docker run -d -p 5000:5000 -v /path/to/local/reg:/tmp/registry registry
# 上传镜像,先标记在提交
docker tag ubuntu:14.04 <HOST_IP>:5000/test
docker push <HOST_IP>:5000/test

# 默认情况下远程必须使用https连接才能进行推送,或者配置ssl或者按照如下任意一种方式,屏蔽即可。
# 一、 配置 docker daemon 启动参数以新人远程仓库
# DOCKER_OPTS="--insecure-registry <HOST_IP>:5000"
# 二、 编辑 /usr/lib/systemd/system/docker.service
# ExecStart=/usr/bin/dockerd
ExecStart=/usr/bin/dockerd --insecure-registry <HOST_IP>:5000

# 重启docker
systemctl daemon-reload
systemctl restart docker

# 下载镜像
docker pull <HOST_IP>:5000/test

docker 数据管理相关

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 挂载数据卷
docker run -d -P --name web -v /path:/opt/webapp <镜像标签或者是ID>
# 挂载只读数据卷
docker run -d -P --name web -v /path:/opt/webapp:ro <镜像标签或者是ID>
# 创建一个数据卷容器
docker run -it -v /dbdata --name dbdata ubuntu
# 在其他容器使用数据卷容器
docker run -it --volumns-from dbdata --name db1 ubuntu
# 删除数据卷容器,需要在最后一个还挂载着数据卷的容器上使用,指定删除数据卷才行
docker rm -v <数据卷容器ID>
# 数据卷容器备份
docker run --volumns-from dbdata -v $(PWD):/backup --name worker ubuntu tar -cvf /backup/backup.tar /dbdata
# 数据卷容器恢复
docker run -v /dbdata --name dbdata2 ubuntu /bin/bash
docker run --volumns-from dbdata2 -v $(PWD):/backup busybox tar -xvf /backup/backup.tar

docker 容器通信

1
2
3
# 容器互联,避免占用多余的端口 
docker run -d --name db training/postgres # 创建数据库容器
docker run -d -P --name web --link db:db training/webapp python app.py # 链接数据库容器 --link 容器名称:别名

docker Dockerfile

以下是一个Dockerfile的样例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# This Dockerfile uses the ubuntu image
# VERSION 2 - EDITION 1
# Author: docker_user
# 使用的基础镜像
FROM <image>
# 环境变量
ENV HOST_IP 127.0.0.1
# 镜像元数据标签信息
LABEL version=1.0
# 维护者
MAINTAINER dockers_user <docker_user@email.com>
# 容器运行的用户
USER root
# 暴露端口
EXPOSE 80 443
# 工作目录
WORKDIR /home/ws
# 增加文件 src 可以是URL 如果是tar文件直接被解压缩
ADD <src> <desc>
COPY <src> <desc> # 推荐
# 运行命令
RUN <command>
RUN echo "hello world" >> /tmp/a.txt
RUN yum install g++ && echo "Hello" && echo "World" \
&& echo "."
# 入口命令
ENTRYPOINT command param1 ...
# 镜像内使用的参数
ARG <name>[=<default value>]
# 增加onbuild会使以此镜像为基础的镜像构建时运行这里边的命令
ONBUILD RUN echo "Hello"
STOPSIGNAL signal
# 禁止健康检查
HEALTHCHECK NONE
SHELL ["/bin/sh","-c"]
# 数据挂载点
VOLUME ["/data"]
# 运行命令
CMD /usr/sbin/nginx
# CMD ["nginx","-g","daemon off;"]

docker Dockerfile相关命令

1
2
3
# 创建镜像
docker build -t <镜像标签> <Dockerfile所在路径>
# 使用 .dockerignore 文件忽略文件

docker 最佳实践

  1. 精简镜像用途
  2. 选用合适的基础镜像
  3. 提供足够清晰的命令注释和维护者信息
  4. 正确的使用版本号
  5. 减少镜像层数
  6. 及时删除临时文件和缓存文件
  7. 提高生产速度
  8. 调整合理的指令顺序
  9. 减少外部源的干扰

docker create 命令与容器运行模式相关的选项 常见

1
2
3
4
5
6
7
8
docker create 
-a # 绑定标准输入输出和错误
-d # 后台运行
-i # 指定标准输入打开
-p # 端口映射设置
-t # 分配一个伪终端 -it 一般联合使用
-v # 挂载驱动盘 宿主机:容器
-w # 默认工作目录
#docker #基础

Copyright © 2021 zhoyq.com. All rights reserved.

京ICP备 17068495号-1