Docker的介绍与部署

Posted 清晨丶暖阳

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker的介绍与部署相关的知识,希望对你有一定的参考价值。

云计算三层架构说明

服务说明应用
IAAS基础设施及服务硬件(服务器、网络设置、防火墙等)虚拟化
网络虚拟化(大二层)
例:openstack
PAAS平台及服务环境
例:数据库、 docker 、kubernetes
SAAS应用及服务应用
例:应用商店的应用

一、何为Docker?

一种轻量级的“虚拟机”,一种开源的应用容器引擎,没有接口的沙箱机制(一个限制应用程序对系统资源的访问的运行环境)。

二、Docker的使用场景

  1. 对应用的打包和部署自动化
  2. 创建轻量、私密的paas环境
  3. 实现自动化测试和持续的集成部署
  4. 部署和扩展系统、数据库、后台服务

三、Docker三大重点

  1. 镜像
  2. 容器
  3. 仓库
    - 公有仓库:官方的
    - 私有仓库:个人私有的
    在仓库中获取镜像,在使用镜像创建容器。如果容器管理系统应用。
对比参数虚拟机容器
启动时间慢 (分钟级别)快速(毫秒级别)
占用空间大(整个系统的大小,几G)小(内核大小,几M)
系统隔离逻辑隔离依赖于内核(内核共享)
安全性 (因为隔离性)低(使用原系统内核)

四、CentOS下安装Docker

1、安装依赖包

yum install -y yum-utils device-mapper-persistent-data lvm2

1、 yum-utils提供了yum-config-manager

2、 device mapper存储驱动程序需要device-mapper-persistent-data和lvm2

3、 Device Mapper 是Linux2.6内核中支持逻辑卷管理的通用设备映射机制,它为实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构。

2、设置阿里云镜像源

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3、安装和部署Docker服务

### 安装服务
yum install -y docker-ce
### 关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
### 永久关闭系统安全机制
vim /etc/selinux/config
SELINUX=disabled   # 修改配置文件方式:表示关闭
### 启动服务,开机自启
systemctl start docker.service 
systemctl enable docker.service

a、配置阿里云加速

为了提升下载镜像的速度可以配置阿里云加速环境:创建.json的脚本文件。

  1. 阿里云上获取加速地址
  2. 阿里云官网:https://account.aliyun.com/
  3. 获取方式:登录阿里云–>控制台–>在上面搜索容器镜像服务–>左下角的镜像加速器
### 创建配置文件:daemon.json
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://cvam.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

3、查看docker信息

### 查看Docker版本信息
docker version


containerd:是容器技术标准化之后的产物,为了能够兼容OCI标准,将容器运行时及其管理功能从Docker Daemon剥离。理论上,即使不运行dockerd,也能够直接通过containerd来管理容器。containerd主要职责是镜像管理(镜像、元信息等)、容器执行(调用最终运行时组件执行)。

runC:是从Docker的libcontainer中迁移而来的,实现了容器启停、资源隔离等功能。Docker默认提供了docker-runc实现,事实上,通过containerd的封装,可以在Docker Daemon启动的时候指定runc的实现。

docker-init:容器的初始化。

4、查看docker信息

### 查看docker信息
docker info
### docker主目录
Docker Root Dir: /var/lib/docker

5、镜像操作基础

a、查找镜像

### 查找镜像
docker search 服务名
docker search nginx

b、下载镜像

### 下载镜像
docker pull 服务名
docker pull nginx

c、查看镜像信息

docker images
docker inspect 镜像的ID
实例:
### 查看docker中的所有镜像
docker images
### 查看指定镜像的详细信息:镜像名/ID
docker inspect f6d0b4767a6c

d、镜像打标签(ID不变添加标签)

docker tag 仓库名:原镜像名 仓库名:新镜像名
### 创建一个基于原镜像的副本
docker tag nginx:latest nginx:test
### 查看所有镜像
docker images
### 筛选出指定的镜像
docker images | grep nginx

e、删除镜像

docker rmi 镜像的ID
docker rmi 仓库名:镜像名
### rmi:删除指定镜像(ID/镜像名)
docker rmi f6d0b4767a6c		#注意打过标签的无法通过ID默认删除,-f强制即可(一个ID两个镜像,无法识别)
docker rmi nginx:test
docker images

f、导出/导入镜像到宿主机目录

1、导出镜像

docker save -o 存放镜像的位置 仓库名:镜像名
### 导出镜像到指定目录
docker save -o /opt/nginx_latest nginx:latest

2、导入镜像

方法一:
docker load < 本地导出的镜像名
方法二:
docker --input 本地导出的镜像名
### 将继续导入docker容器内
docker load < nginx_latest
docker load --input nginx_latest

g、上传镜像

  1. 登录镜像仓库:登陆账号通过docker官网注册(https://hub.docker.com/)
  2. 上传的镜像需要修改标签,在标签前添加登录用户名
    - 标签格式: Docker官网的账号名/仓库名:镜像名
  3. 公司内部都使用私有仓库
docker push [OPTIONS] NAME[:TAG]

例如:按照下面的流程就可以上传到公有云,有兴趣的可以上传
#改标签
docker tag 仓库名:镜像名 用户名/仓库名:镜像名
#登录
docker login
Username:   #用户名
Password:   #密码
#上传镜像
docker push 用户名/仓库名:镜像名

h、容器操作

查看容器运行状态

  • 容器的STATUS状态
    - up是正在运行的
    - Exited (0)是正常停止的容器
    - Exited (非0)异常停止的容器
docker ps       #查看运行中的容器
docker ps -a    #加-a 列出所有的容器,包括未运行的容器

创建容器

docker create [选项] 镜像运行的程序
-i:让容器的标准输入保持打开
-t:让Docker分配一个伪终端
### 创建容器,保持开启状态,再分配一个伪终端
docker create -it nginx:latest /bin/bash

启动、停止、重启容器

docker start 容器ID:启动一个或多个已经被停止的容器
docker stop 容器ID:停止一个运行中的容器
docker restart 容器ID:重启容器
### 启动容器:
docker start a9b99fced079
### 添加容器:容器ID
docker stop a9b99fced079
### 重启容器:容器ID
docker restart a9b99fced079
### 查看所有容器状态
docker ps -a
### 查正在运行的容器
docker ps

运行容器

  1. run和start的作用有些类似,准确来说run相当于create+start(创建并启动一步到位)
  2. 一般第一次可以使用run,后面维护还是使用start/stop/restart
docker run [选项] 镜像 [命令] [变量]
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用
-c 命令表示后面的参数将会作为字符串读入作为执行的命令
-v: 绑定一个卷
-P: 随机端口映射,容器内部端口随机映射到主机的端口
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
--name="名称": 为容器指定一个名称
--link name:alias 添加链接到另一个容器,格式“--link容器名:别名”

### 运行容器
docker run nginx
### 后台运行
docker run -d nginx
### 后台运行,并直接执行:ls命令
docker run -d nginx /bin/bash -c "ls"

Exited中的返回值为0表示正常退出,非0表示异常退出。

进入、退出容器

docker exec [选项] 容器 命令
### 进入容器,保持终端开启
docker exec -it 0d89bd6232f3 /bin/bash
docker exec -it 6445720c61a5 /bin/bash
exit		#退出容器

容器的导出和导入

### 容器导出
docker export 容器ID > 备份文件名

### 容器导入(会生成镜像,而不会创建容器)
cat 备份文件名 | docker import - 仓库名:镜像名

### 导出容器到当前宿主机目录:命名为 nginx_up
docker export 6445720c61a5 > nginx_up
docker export 0d89bd6232f3 > nginx_exited
### 导入nginx_up ,到指定的镜像 nginx:web中
cat nginx_up | docker import - nginx:web

实际上,导入容器后不会创建容器,只会生成镜像。

删除容器

docker rm 容器ID
### 通过容器ID删除
docker rm 4d8dcf51a4ef
//批量删除容器
docker ps -a | awk '{print "docker rm "$1}' | bash

i、私有仓库操作

创建私有仓库

### 从私有仓库或公有仓库获取镜像
docker pull registry
### 修改配置文件:设置加速器,设置私有仓库IP地址和私有仓库对应端口号
vim /etc/docker/daemon.json
{
"insecure-registries": ["192.168.163.100:5000"],     添加
"registry-mirrors": ["阿里云加速地址"]
}
systemctl restart docker.service
docker create -it registry /bin/bash
docker ps -a
### 启动容器
docker start 8480e3f87c8e


挂载容器

宿主机的/data/registry自动创建挂载容器中的/tmp/registry

docker run -d -p 宿主机端口:容器内部端口 -v 宿主机目录:容器内目录 镜像
例:
docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry

更改标签

### 将标签设置为自身IP地址以及端口
docker tag nginx:latest 192.168.163.100:5000/nginx


将指定标签进行上传

### 登录用户,将标签上传到私有仓库
docker push 192.168.163.100:5000/nginx


获取私有仓库列表

curl -XGET http://192.168.163.100:5000/v2/_catalog
//显示上传成功
(""repositories":[""nginx"")

下载私有仓库中的镜像

### 获取私有仓库镜像
docker pull 192.168.163.100:5000/nginx

6、docker数据卷和数据卷容器

创建的数据卷和数据卷容器时,挂载的目录若不存在,那么将自动创建。

### 将宿主机的目录挂载到容器中目录上,
docker run -v /var/www:/dataGZ --name test1 -it 192.168.88.47:5000/centos1:latest /bin/bash

数据卷容器:将新容器挂载到数据卷容器。

### 创建数据卷容器
docker run --name juan -v /data1 -v /data2 -it centos:7 /bin/bash
### 同步新容器挂载数据卷容器juan中的两个目录(data1、2),
docker run -it --volumes-from juan --name test2 centos:7 /bin/bash

端口映射:可指定映射端口,或默认映射端口

docker run -d -P httpd:centos7				#默认映射端口
docker run -d -p 49280:80 httpd:centos7		#自定义映射端口

7、容器互联

将一个镜像,通过取名的方式创建多个不同的容器。即该容器命名不同,却存在相同的IP地址。

### 创建并运行容器取名web1,端口号自动映射
docker run -itd -P --name web11 centos:7 /bin/bash

### 创建并运行容器取名web2,链接到web1和其通信进web22容器 ping web1
docker run -itd -P --name web22 --link web11:web11 centos:7 /bin/bash
### 用于设置指定容器引用的连接容器
--link name:alias                  --link容器名:别名


以上是关于Docker的介绍与部署的主要内容,如果未能解决你的问题,请参考以下文章

Docker容器——Docker的介绍与部署

Docker容器——Docker的介绍与部署

Docker-容器介绍与配置镜像分层部署nginx优化镜像

docker与docker-compose介绍,对比与使用

私有镜像仓库Harbor基础介绍与部署

docker 部署 coredns(内部域名解析)