docker-doc-搭建和使用

介绍

镜像与容器的关系就如果软件与进程一样,容器只是镜像的一个运行的实例。

Docker本质上就是宿主机上的一个进程,docker通过namespace实现了资源隔离,通过cgroup实现了资源限制,通过写时复制技术(copy-on-write)实现了高效的文件操作。

Docker是通过内核虚拟化技术来提供容器的资源隔离与安全保证。由于docker通过操作系统层的虚拟化实现隔离,所以docker容器在运行时,不需要额外的虚拟化管理程序(VMM(Virtual Machine Monitor),以及hyperisor)支持。

  • Namespace的六项隔离
namespace 系统调用参数 隔离内容
UTS CLONE_NEWUTS 主机名与域名
IPC CLONE_NEWIPC 信号量消息队列和共享内容
PID CLONE_NEWPID 进程编号
NEWWORK CLONE_NEWNET 网络设备,网络栈,端口
MOUNT CLONE_NEWNS 挂着点(文件系统)
USER CLONE_NEWUSER 用户与用户组

搭建

移除旧的

1
2
3
4
5
6
7
8
9
10
11
12
13
yum remove docker
yum remove docker-client
yum remove docker-client-latest
yum remove docker-common
yum remove docker-latest
yum remove docker-latest-logrotate
yum remove docker-logrotate
yum remove docker-selinux
yum remove docker-engine-selinux
yum remove docker-engin
yum remove docker-ce
rm -rf /var/lib/docker
rm -rf /etc/docker

安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 安装一些必要的系统工具
yum install -y yum-utils device-mapper-persistent-data lvm2

# 添加软件源信息
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 添加软件源信息 - 方式2
# yum update
# yum install epel-release -y

# 更新 yum 缓存
yum makecache fast

# 安装 Docker-ce
yum -y install docker-ce

# 启动 Docker 后台服务
systemctl start docker

# 查看安装成功
docker version

镜像加速

鉴于国内网络问题,后续拉取 Docker 镜像十分缓慢,我们可以需要配置加速器来解决,我使用的是网易的镜像地址:http://hub-mirror.c.163.com。
新版的 Docker 使用 /etc/docker/daemon.json(Linux) 或者 %programdata%\docker\config\daemon.json(Windows) 来配置 Daemon。

请在该配置文件中加入(没有该文件的话,请先建一个):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}

{
"registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]
}

{
"registry-mirrors": ["https://9cpn8tt6.mirror.aliyuncs.com"]
}

{
"registry-mirrors": ["https://mirror.ccs.tencentyun.com"]
}

修改完配置记得重启

1
2
systemctl daemon-reload
systemctl restart docker

使用

操作

1
2
3
4
5
6
7
8
# 启动docker
systemctl start docker

# 重启docker
systemctl restart docker

# 退出docker容器
exit

网络

安装docker之后,默认会有一个新的网卡,地址为172.17.0.1,以后的容器都会以ip+1占用ip地址172.17.0.2

持久化

默认情况下,docker启动的容器在关闭后,数据将不会存储。使用volume命令创建持久化数据目录。

镜像

介绍

Docker镜像制作提供了2种方式,通过 Dockerfile 来自动编译生成镜像通过容器内操作,并进行 Commit 来实现打包生成镜像
第一种思路多用于用户交互较少的时刻,比如软件部署时无需输入任何命令的应用。第二种思路用于用户交互较多、安装过程中配置较多的应用。

Dockerfile 打包

  • 关键字
含义
FROM 制作该image的基础镜像
RUN 运行一条指令
ENV 常量设置
VOLUME 目录
COPY 文件拷贝
EENTRYPOINT 设置容器启动时运行的指令
CMD 容器启动时运行的指令,可以带参数
EXPOSE 暴露在物理机器的端口

自定义容器

上传流程

1
2
3
4
5
6
7
8
# 登录
docker login ...

# 提交镜像
docker commit ...

# 上传镜像
docker push

镜像的名称必须以账号名称的风格处理 xxxx/xxxx,不然push会拒绝denied:request access to the resource is denied

中文乱码

  • 已经启动的容器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 进入容器
# 设置语言
# 美国中文
echo 'export LANG="en_US.UTF-8"' >> /etc/profile
source /etc/profile

# 大陆中文安装
yum -y install kde-l10n-Chinese telnet && \
yum -y reinstall glibc-common &&\
yum clean all && \
localedef -c -f UTF-8 -i zh_CN zh_CN.utf8

# 设置语言
echo 'export LANG="zh_CN.utf-8"' >> /etc/profile
source /etc/profile

快捷键

快捷键 描述
ctrl + p + q 后台运行容器
ctrl + c 退出和关闭容器

帮助

日期同步

  • 共享主机的localtime (方法一)

    1
    docker run -d -v /etc/localtime:/etc/localtime --rm -p 8888:8080 tomcat:latest
  • 复制主机的localtime (方法二)

    1
    docker cp /etc/localtime xxxx:/etc/localtime