Docker安装与基础使用

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/

  1. 卸载之前的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. 安装必要的依赖
1
2
3
sudo yum install -y yum-utils \ 
device-mapper-persistent-data \
lvm2
  1. 设置docker仓库
1
2
3
sudo yum-config-manager \ 
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
  1. 查看可以安装的版本
1
yum list docker-ce --showduplicates | sort -r
  1. 安装最新或指定版本
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
  1. 启动docker并设置为开机启动
1
sudo systemctl start docker && sudo systemctl enable docker
  1. 测试docker安装是否成功
1
sudo docker run hello-world
  1. 配置镜像加速器

镜像加速器设置方式: 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

Docker安装与基础使用
http://www.zivjie.cn/2023/04/22/云原生(容器化)/docker/Docker安装与基础使用/
作者
Francis
发布于
2023年4月22日
许可协议