Docker 快速入门
一、 Docker 概念与安装
1. Docker是什么:
- 使用最广泛的爱看i元容器引擎
- 一种操作系统级的虚拟化技术
- 依赖于linux内核特性:Namespace(资源隔离)和cgroups(资源限制)
- 一个简单的应用程序打包工具
- Docker client: 客户端命令
- Host: 安装docker的虚拟机,用于创建容器
- Docker registry: 镜像
2. Docker 基本组成:
- Docker client: 客户端命令
- Host: 安装docker的虚拟机,用于创建容器
- Docker registry: 镜像
3. 版本与支持的平台:
- Docker版本:
社区版(Commuity Edition,CE)
企业版(Enterprise Edition,EE)
- 支持平台:
Linux (centos、debian、fedora、oracle linux、RHEL、SUSE、和Ubuntu)
Mac
Windows
官方文档: https://docs.docker.com/
阿里云源:http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
注:安装docker 先关闭防火墙和selinux
4. Docker 安装
- 二进制安装:
https://download.docker.com/linux/static/stable/x86_64/
解压:
tar xzvf /path/to/<FILE>.tar.gz
复制到bin下:
cp docker/* /usr/bin/
- yum安装:
https://docs.docker.com/engine/install/centos
卸载之前旧的版本
yum remove docker
\
docker-client
\
docker-client-latest
\
docker-common
\
docker-latest
\
docker-latest-logrotate
\
docker-logrotate
\
docker-engine
添加新yum源
yum install
-yyum-utils
yum-config-manager
\
--add-repo
\
https://download.docker.com/linux/centos/docker-ce.repo
(可以替换为阿里源)
安装docker-ce
yum install docker-ce
systemctl start docker
systemctl enable docker
查看docker 可用的版本
yum list docker-ce
--showduplicates| sort
-r
二、 镜像管理
1. 镜像是什么
- 一个分层存储的文件,不是一个单一的文件
- 一个软件的环境
- 一个镜像可以创建N个容器
- 一种标准化的交付
- 一个不包含Linux内核而又精简的Linux操作系统
2. 配置加速器
Docker Hub室友Docker公司负载维护的公共镜像仓库,包含大量的容器镜像,Docker工具默认从这个公共镜像下载镜像。地址:https://hub.docker.com
3. 配置镜像加速器:
vi /etc/docker/daemon.json
{
“registru-mirrors”: [“https://b9pmyelo.mirror.aliyuncs.com”]
}
systemctl daemon-reload
systemctl restart docker
常见管理命令
指令 |
描述 |
ls |
列出镜像 |
build |
构建镜像来自Dockerfile |
inspect |
显示一个或多个镜像详细信息 |
pull |
从镜像仓库拉取镜像 |
push |
推送一个镜像到镜像仓库 |
rmi或rm |
删除一个或多个镜像 |
prune |
移除没有被标记或者没有被任何容器引用的镜像 |
tag |
创建一个引用源镜像标记目标镜像 |
save |
保存一个或多个镜像到一个tar归档文件 |
load |
加载一个来自tar归档或标准输入 |
history |
查看镜像的历史 |
--help |
Docker 命令帮助 |
4. Docker工作目录
默认路径/var/lib/docker
root@k8s-master:/var/lib/docker# tree -L 1 /var/lib/docker
/var/lib/docker
├── builder
├── buildkit
├── containers #存储容器得目录
├── image #存储镜像得元数据信息等
├── network #存储网络
├── overlay2 #根据存储驱动名字,存方镜像得目录
├── plugins #插件相关
├── runtimes
├── swarm
├── tmp
├── trust
└── volumes #存储数据卷
修改工作目录方法:
方法一:新建或者编辑 /etc/docker/daemon.json
{
"data-root": "/data/docker"
}
方法二:编辑文件 /usr/lib/systemd/system/docker.service
[Service]
。。。。。。
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --data-root=/data/docker
ExecReload=/bin/kill -s HUP $MAINPID
。。。
。。。
重启docker(不管方法几都要重启)
systemctl daemon-reload
systemctl restart docker
注意:目前网上大多数配置参数是 --graph ,其实这是老版本中的使用方法,新版本已经抛弃,改用了 --data-root ,具体可以通过命令 dockerd --help 查看使用的参数。
三、 容器管理
1. 创建容器常用的命令
docker run 【选项】
-d 后台允许
-it 分配一个伪终端的运行
例: -d 和-it区别,因不加-it centos是启动不了的,因没有进程运行所以退出,加-it是给centos容器启动一个伪终端,又进程运行所有可以运行
docker run -d centos 退出
docker run -d -it centos 启动
-e 设置环境变量
-p 指定一个端口映射容器的端口
-P 自动分配一个宿主机的端口映射容器端
-v 挂载目录,实现数据持久化
--mount (新方式)
--name 指定容器名字
-h 指定容器主机名
--ip 指定容器id,只能用于自定义网络
--network 连接容器的一个网络
--restart 容器退出时重启策略,默认时no可选值:always,on-failure
Always:会无限尝试重启退出的容器(无论以什么退出码退出)。手动停止容器后,容器策略不再生效。除非重启docker daemon
on-failure:重启因出错停止的容器(非0退出码)。可以通过指定max-retries来限定docker daemon的最大尝试重启次数
on: 不自动重启(默认模式)
unless-stopped: 与always
类似,区别在于手动停止容器后,就算重启docker daemon,容器策略也不再生效。
资源限制:
-m,-memory 容器可以使用的最大内存量
--memory-swap 允许交换到磁盘的内存量
--memory-swappiness=<0-100> 容器使用SWAP分区交换的百分比(0-100,默认为-1)
--oom-kill-disable 禁止OOM killer
--cpus 可以使用的CPU数量
--cpuset-cpus 限制容器使用特定的CPU核心,如:0-3,0,1
--cpu-shares CPU共享(相对权重)
例:限制容器最多使用500M内存,1颗cpu
docker run -itd -p 8080:8080 -m=”500m” --cpus=”1” java
2. 常用管理命令
docker container 【选项】
选项 |
描述 |
ls |
列车容器 |
inspect |
查看一个或多个容器详细信息 |
commit |
创建一个新镜像来自一个容器 |
exec |
在运行容器中执行命令 |
cp |
拷贝文件/文件夹到一个容器 |
logs |
获取容器的日志 |
port |
列出容器的端口映射 |
top |
查看容器运行的进程 |
stats |
显示容器资源使用统计 |
stop/start/restart |
停止/启动/重启命令 |
rm |
删除容器 |
ps |
列出容器-a参数列出所有容器包含退出的,-q列出容器id |
prune |
移除已停止的容器 |
stats 参数 –no-stream 只显示一次信息例
docker stats web --no-stream
3. 容器数据持久化
Docker 提工三种方式将数据从宿主机挂载到容器:
volume:docker 管理宿主机文件系统的一部分(/var/lib/docker/volumes)保存数据的最佳方式。volume本质和bind mount的操作方式一样,只不过在volume这种方式中,宿主机目录是由docker进行管理的,然后再挂载到容器中,不会覆盖容器中的对应目录文件,是共享的。
bind mounts: 将宿主机上的任意为止的文件或者目录挂载到容器,会覆盖容器中的对应目录文件。推荐
tmpfs mount:是将宿主机的内存挂载到容器中
1. volumes 示例:
创建数据卷
docker volume create nginx-vol
docker volume ls
docker volume inspect nginx-vol
使用数据卷
docker run -d --name=nginx-test --mont src=nginx-vol,dst=/usr/share/nginx/html nginx
docker run -d –name=nginx-test -v nginx-vol:/usr/share/nginx/html nginx
2. bind mounts示例(最常用)
挂载宿主机目录到容器
方法1:
docker run -d --name=nginx-test –mount type=bind,src=/app/wwwroot,dst=/usr/share/nginx/html nginx
方法2:
docker run -d --name=nginx-test -v /app/wwwroot:/usr/share/nginx/html nginx
3. 容器网络
veth pair: 成对出现的一种虚拟网络设备,数据从一端进,从另一端出,用于解决网络命名空间之间的隔离。
docker0: 网桥是一个二层网络设备,通过网桥可以将lingx支持的不通端口连接起来,并实现类型交换机那样的多对多的通信。
Docker使用iptables实现网络通讯
四、 Dockerfile 构建镜像
Docker通Dockerfile自动构建镜像,Dockerfile是一个包含用于组建镜像的文本文件,有一条条的指令组成。
五、 Harbor镜像仓库搭建与使用
Harbor是由vmware公司开源的容器镜像仓库。事实上harbor是在docker registry 上进行了相应企业级扩展,从而获得了更加广泛应用,这些新的企业级特性包括:管理用户界面,基于角色的访问控制,AD/LDAP集成以及审计日志等,足以满足基本企业需求。
Github: https://github.com/goharbor/harbor
服务器硬件配置:
最低要求: CPU核/内存4G/硬盘40GB
推荐: CPU4核/内存8G/硬盘160GB
软件:
Docerk CE 1.7.06版本+
Docker Compose 1.18版本+
Harbor 安装有2中方式:
在线安装:从Docker Hub下载相关镜像,因此安装软件包非常小
离线安装:安装包包含部署的相关镜像,因此安装包比较大
1. 安装
采用离线安装:下载镜像
下载离线包:wget https://github.com/goharbor/harbor/releases/download/v2.1.3/harbor-offline-installer-v2.1.3.tgz
先安装docker和docker compose
https://github.com/docker/compose/releases
2. 部署harbor
解压
tar xf harbor-offline-installer-v2.1.3.tgz
进入解压目录
cd harbor
cp harbor.yml.tmpl harbor.yml
修改配置
vi harbor.yml
hostname:xxxx #指定访问的域名
htts: #先注释https相关配置
安装:
./prepare
./install.sh
harbor 默认登录账号
admin/Harbor12345
3. harbor基本使用
配置http镜像仓库可信任
Vim /etc/docker/daemon.json
{
“insecure-registries”: [“域名或ip”]
}
打标签
docker tag centos:7 xxxx/library/centos:7
上传
docker push xxxx/library/centos:7
下载
docker pull xxxx/library/centos:7