1 Docker介绍与安装
1.1 介绍
官网:https://www.docker.com/

Container是一种轻量级的虚拟化技术,不用模拟硬件创建虚拟机。
Docker是基于Linux Kernel的Namespace、CGroups、UnionFileSystem等技术封装成的一种自定义容器格式,从而提供一套虚拟运行环境。
1 2 3 4
| Chroot:Change Root 隔离文件 Namespace:用来做隔离的,比如pid、net、mnt等 CGroups: Controller Groups用来做资源限制,比如内存和CPU等 Union file systems:用来做image和container分层
|
1.2 安装(CentOS)
参考文档:https://docs.docker.com/engine/install/centos/
在线使用:https://labs.play-with-docker.com/
- 卸载之前的docker
1 2 3 4 5 6 7 8
| sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
|
- 安装必要的依赖
1 2 3
| sudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm2
|
- 设置docker仓库
1 2 3
| sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
|
- 查看可以安装的版本
1
| yum list docker-ce --showduplicates | sort -r
|
- 安装最新或指定版本
1 2
| 安装最新版本:sudo yum install -y docker-ce docker-ce-cli containerd.io dockercompose-plugin 安装指定版本:sudo yum install -y docker-ce-20.10.7 docker-ce-cli-20.10.7 containerd.io docker-compose-plugin
|
- 启动docker并设置为开机启动
1
| sudo systemctl start docker && sudo systemctl enable docker
|
- 测试docker安装是否成功
1
| sudo docker run hello-world
|
- 配置镜像加速器
镜像加速器设置方式: https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
1.3 Docker体验
https://hub.docker.com/
(1)tomcat:8.0
1 2
| 拉取镜像:docker pull tomcat:8.0 根据镜像创建容器:docker run -d --name tomcat01 -p 8088:8080 tomcat:8.0
|
(2)mysql
1
| docker run -d --name my-mysql -p 3301:3306 -e MYSQL_ROOT_PASSWORD=jack666 --privileged mysql:5.7
|
2 Image

2.1 根据Dockerfile构建镜像
MySQL Dockerfile:https://github.com/docker-library
1
| docker build -t custom-mysql-image
|
2.2 制作jar包镜像
(1)创建一个Spring Boot项目
(2)写一个controller
1 2 3 4 5 6 7 8
| @RestController public class DockerController{ @GetMapping("/hello") @ResponseBody String dockerFile(){ return "hello docker"; } }
|
(3)mvn clean package,并在target下找到”dockerfile-demo-0.0.1-SNAPSHOT.jar”
(4)上传”dockerfile-demo-0.0.1-SNAPSHOT.jar”到centos,并创建Dockerfile文件
(5)编写Dockerfile内容
1 2 3
| FROM openjdk:8 COPY dockerfile-demo-0.0.1-SNAPSHOT.jar dockerfile-image.jar CMD ["java","-jar","dockerfile-image.jar"]
|
(6)基于Dockerfile构建镜像并查看
1 2
| docker build -t custom-docker-image docker images
|
(7)基于image创建container
1
| docker run -d -name docker01 -p 6666:8080 custom-docker-image
|
(8)查看启动日志docker logs docker01
(9)宿主机上访问curl localhost:6666/hello
2.3 阿里镜像仓库
https://cr.console.aliyun.com/cn-hangzhou/instances
(1)进入个人实例:https://cr.console.aliyun.com/cn-hangzhou/instance/dashboard
(2)创建命名空间,比如test-kubernetes
(3)在centos上登录
1
| sudo docker login --username={your name} registry.cn-hangzhou.aliyuncs.com
|
(4)给image打tag
1 2 3
| sudo docker tag 91b27814153f registry.cn-hangzhou.aliyuncs.com/test-kubernetes/custom-docker-image:v1.0
docker images
|
(5)推送镜像到镜像仓库
1
| sudo docker push registry.cn-hangzhou.aliyuncs.com/test-kubernetes/custom-docker-image:v1.0
|
(6)下载镜像并运行
1 2
| docker pull registry.cn-hangzhou.aliyuncs.com/test-kubernetes/custom-docker-image:v1.0 docker run -d --name docker01 -p 6661:8080 registry.cn-hangzhou.aliyuncs.com/test-kubernetes/custom-docker-image:v1.0
|
2.4 Image基本操作
1 2 3 4 5 6 7 8 9 10 11 12 13
| (1) 查看本地image列表 docker images docker image ls (2) 获取远端镜像 docker pull (3) 删除镜像[注意此镜像如果正在使用,或者有关联的镜像,则需要先处理完] (-f 强制) docker image rm imageid docker rmi -f imageid docker rmi -f $(docker image ls) 删除所有镜像 (4) 运行镜像 docker run image (5) 推送镜像 docker push
|
3 Container
container是基于image之后的layer,也就是可以通过docker run image创建出 一个container出来。

3.1 通过Container制作Image
(1) 拉取tomcat镜像
1 2
| docker pull tomcat docker images
|
(2) 根据tomcat镜像创建出一个tomcat container
1 2
| docker run -d -it --name test-tomcat tomcat docker ps
|
(3) 进入test-tomcat容器中[这里也可以看出container其实就是一个最小内核的linux系统]
1 2 3
| docker exec -it test-tomcat bash pwd cat /etc/issue
|
(4) 在tomcat的webapps目录下创建test文件夹,并且新建wel.html文件
1 2 3
| mkdir test cd test echo "welcome to java." > wel.html
|
(5) 退出容器,将其生成一个新的tomcat,名称为: customized-tomcat
1 2 3
| exit docker commit test-tomcat customized-tomcat docker images
|
(6) 基于customized-tomcat镜像创建新的容器
1 2
| docker run -d -it --name customized-tomcat01 -p 8001:8080 customized-tomcat docker ps
|
(7) 进入到customized-tomcat01容器中,看看文件是否存在
1 2 3 4
| docker exec -it customized-tomcat01 bash cd webapps ls cat test/wel.html
|
(8) 访问centosip:8081/test/wel.html
3.2 Container常见操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| (1) 根据镜像创建容器 docker run -d --name -p 9090:8080 my-tomcat tomcat (2) 查看运行中的container docker ps (3) 查看所有的container[包含退出的] docker ps -a docker ps -aq (4) 删除container docker rm containerid docker rm -f $(docker ps -a) 删除所有container (5) 进入到一个container中 docker exec -it container bash (6) 根据container生成image docker commit jack-tomcat gupao-customized-tomcat (7) 查看某个container的日志 docker logs container (8) 查看容器资源使用情况 docker stats docker stats container (9) 查看容器详情信息 docker inspect container (10) 停止/启动容器 docker stop/start container
|
3.3 设置Container资源限制
(1)内存限制:–memory 如果不设置 –memory-swap,其大小和memory一样
1 2
| docker run -d -memory 100M --name test-tomcat-memory-limit tomcat docker status
|
(2)CPU限制:–cpu-shares 权重
1 2
| docker run -d --cpu-shares 10 test-tomcat-cpu-limit tomcat docker status
|