什么是Docker?
Docker
使用 Google
公司推出的 Go
语言 进行开发实现,基于 Linux
内核的 cgroup
,namespace
,以及 AUFS
类的 Union FS
等技术,对进程进行封装隔离,属于 操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。最初实现是基于 LXC
,从 0.7 版本以后开始去除 LXC
,转而使用自行开发的 libcontainer
,从 1.11 开始,则进一步演进为使用 runC
和 containerd
。
Docker
在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 Docker
技术比虚拟机技术更为轻便、快捷。
对开发和运维(DevOps)
人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。
使用 Docker
可以通过定制应用镜像来实现持续集成、持续交付、部署。开发人员可以通过 Dockerfile
来进行镜像构建,并结合 持续集成(Continuous Integration)
系统进行集成测试,而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合 持续部署(Continuous Delivery/Deployment)
系统进行自动部署。
而且使用 Dockerfile
使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便运维团队理解应用运行所需条件,帮助更好的生产环境中部署该镜像。
Docker 的安装
以ubuntu 16.04
为例子 Docker
的安装
curl -fsSL get.docker.com -o get -docker.sh
sh get-docker.sh --mirror AzureChinaCloud
等待几分钟后,测试安装
docker version
ubuntu 18.04
安装docker
# 更新软件源
sudo apt-get update
# 安装所需依赖
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# 安装 GPG 证书
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# 新增软件源信息
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# 再次更新软件源
sudo apt-get -y update
# 安装 Docker CE 版
sudo apt-get -y install docker-ce
# 开启 Docker Service
systemctl enable docker.service
Docker 加速器
为Docker
配置镜像加速器
在/etc/docker
文件夹下创建daemon.json
,没有就创建,有就修改。此处使用个人的阿里镜像加速。
{"registry-mirrors":["http://f1361db2.m.daocloud.io"]}
修改完后重启Docker
systemctl daemon-reload
systemctl restart docker
拉取镜像,用 tomcat
为例子
docker pull tomcat
docker pull tomcat:9-jre8
Docker命令
查看容器列表image
等待安装,安装完毕查看镜像
docker images
运行容器
用 tomcat
为例
docker run -p 8080:8080 tomcat
查看所有的容器
docker ps -a
删除容器
docker rm containerID
删除本地镜像
docker rmi tomcat
注意 删除镜像时,一定要确保改镜像创建的容器已关闭。
Docker 容器数据持久化
什么是数据卷?为什么使用数据卷
数据卷是一个提供一个或多个容器的特殊目录,他绕过UFS
,可以提供很多特性
- 数据卷 可以在容器之间共享和重用。
- 对 数据卷 的修改会立马生效。
- 对 数据卷 的更新不会影响镜像。
- 数据卷 默认一直存在,即使容器被删除。
使用数据卷
使用数据卷,创建一个定制tomcat
ROOT
文件夹里只有一个index.html
cd /usr/local/docker ## 进入docker文件夹
mkdir mytomcat ## 创建文件夹
cd mytomcat ## 进入 mytomcat
mkdir ROOT ## 创建ROOT
cd ROOT ## 进入ROOT
vi index.html ## 创建index.html 里面内容写 Hello Docker
cd .. ## 返回 mytomcat
vi Dockerfile ## 定制镜像
Dockerfile
FROM tomcat
构建镜像
docker build -t mytomcat .
启动镜像
docker run -p 8080:8080 -d -v /usr/local/docker/mytomcat/ROOT:/usr/local/tomcat/webapps/ROOT mytomcat
-p 端口映射,-d 后台运行,-v 表示数据卷 宿主机地址:镜像地址
例子 (mysql)
Docker 部署数据库( mysql )
下载mysql
镜像
docker pull mysql:5.7.22 ## latest版本我pull 不下来
通过数据卷运行
docker run -p 3306:3306 --name mysql \
-v /usr/local/docker/mysql/conf:/ect/mysql \
-v /usr/local/docker/mysql/logs:/var/log/mysql \
-v /usr/local/docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7.22
默认的配置会导致sql
脚本过大,导入不进去,所以要手动修改配置文件
修改配置文件,设置导入脚本大小
cd /usr/local/docker/mysql/conf/mysql.conf.d
echo "max_allowed_packet= 128M" >> mysqld.cnf
重新启动mysql
,使用外部的客户端去链接。