Docker 是基于Go语言实现的开源容器项目。期望达到使项目运行环境“一次封装,到处运行的目的”。
Docker:面向内核、软件,docker是秒级别的
虚拟机:面向硬件的,分钟级别
1.Docker daemon*Docker守护进程): 是一个运行在宿主机的后台进程。让Docker客户端与Docker通信
2.Client (Docker客户端): 是Docker的用户界面,它可以接受用户命令和配置标识,并与Docker daemon通信。
3.Images(Docker镜像): 类似于运行软件所在文件夹,在Docker中根据Images创建容器。
4.Container(容器): 类似于运行中的软件,容器是镜像的可运行实例。容器就相当于VMware中每一个克隆出来的虚拟机。
5.Registry(仓库): 存放镜像的仓库.
Docker有windows和linux版本。以安装在Linux上进行演示的。 以下安装步骤基于CentOS stream 8,并确保该虚拟机可以连接外网。
1.下载docker-ce repo
为本地yum提供远程repo信息
curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
2.安装依赖
yum install -y https://download.docker.com/linux/fedora/30/x86_64/stable/Packages/containerd.io-1.2.6-3.3.fc30.x86_64.rpm
3.安装docker-ce
yum install -y docker-ce
启动docker服务
systemctl start docker
设置开机自启
systemctl enable docker
查看docker状态
docker info
4.配置国内镜像仓库
创建文件夹
mkdir -p /etc/docker
编写配置文件
tee /etc/docker/daemon.json <<-'EOF'
加上如下内容:(4行)
{
"registry-mirrors": ["https://xbyx1r45.mirror.aliyuncs.com"]
}
EOF
重新加载配置文件
systemctl daemon-reload
重启docker服务
systemctl restart docker
1.查看本地所有镜像: docker images
REPOSITORY: 镜像所在的仓库名称
TAG: 镜像版本号
IMAGE ID: 镜像ID
CREATED: 镜像的创建日期(不是获取该镜像的日期)
SIZE: 镜像大小(MB)
2.在配置的镜像仓库搜索镜像
NAME: 仓库名称
DESCRIPTION: 镜像描述
STARS: 镜像的受欢迎程度
OFFICIAL: 是否官方
AUTOMATED: 自动构建,表示该镜像由Docker Hub自动构建流程创建的
3.拉取镜像
从远程Registry中下载镜像到本地
docker pull 镜像名称:tag(版本号)
其中:tag可以省略,省略时下载镜像最新版本(lastest)
4.删除镜像
docker rmi 镜像id
docker rmi 镜像id:版本号
1.创建容器
每一个创建容器的命令和参数不一样,具体可以查看官网https://hub.docker.com/
docker create [options] 镜像名字或者ID [COMMAND] [ARG...]
例如mysql
docker run --name 容器名称(随意) -p 外部访问端口:docker内部端口 -e MYSQL_ROOT_PASSWORD=设置密码 -d mysql的镜像名称:镜像版本号
2.创建并启动容器
注意是run不是create
此容器开机自启:
–reset always
docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
参数解释:
–name | 给容器起一个新名字。为容器指定一个名称 |
---|---|
-i | 以交互模式运行容器,通常与-t连用 |
-t | 为容器重新分配一个伪终端,通常与-i连用 |
-P | 随机端口映射 |
-p | 指定端口映射,hostPost:containerPort |
-e | 配置信息 |
-d | 后台执行 |
-v | 主机和容器的目录映射关系,":"前为主机目录,之后为容器目录 |
3.启动容器
docker start 容器ID
docker start mysql(容器)
启动守护式进程:docker容器后台运行,就必须有一个前台进程。
docker run -it -d images [镜像名称][版本号]/[镜像id]
docker run相当于执行了两步操作:将镜像放入容器中(docker create),然后将容器启动,使之变成运行时容器(docker start)。
而docker start的作用是,重新启动已存在的镜像。也就是说,如果使用这个命令,我们必须事先知道这个容器的ID,或者这个容器的名字,我们可以使用docker ps找到这个容器的信息。**
4.停止容器
docker stop 容器ID
docker stop mysql
5.强制停止容器
不推荐使用,容易造成容器服务不正常关闭,影响后续使用。
docker kill 容器ID
docker kill mysql
6.删除容器
要删除的容器,必须是关闭状态的。
docker rm 容器ID
docker rm mysql
7.查看容器中运行的进程
可以知道容器中到底运行的是哪个应用程序。
docker top 容器ID
docker top mysql
docker container ls
8.查看docker容器进程信息:
docker ps [options]
-l | 显示最近创建的容器 |
---|---|
-n 数字 | 显示最近n个创建的容器 -n3 |
-a | 列出所有的运行过的容器 |
-q | 列出容器id |
9.与运行中的容器交互
docker exec -it mysql /bin/bash
docker exec -it mysql bash
-i 以交互模式运行容器,通常与-t连用
-t 为容器重新分配一个伪终端,通常与-i连用
10.查看容器日志
docker logs -f -t --tail 行数 容器ID
docker logs -f -t --tail 5 mysql
–tail 5 显示后5行
-f 事实监听日志
-t 显示记录日志的时间
一般不跟这两个参数
直接写成:
docker logs --tail 5 mysql
11.查看容器内部详情
docker inspect 容器ID
docker inspect mysql
12.复制容器数据到宿主机(复制宿主机数据到容器)
cp 后面,谁在后面表示拷贝到谁里。
docker cp 容器ID:容器内路径 宿主机路径
docker cp 宿主机路径 容器ID:容器内路径
实例:
复制MySQL配置到宿主机
docker cp mysql:/etc/mysql /tmp/conf
复制宿主机文件到MySQL容器
docker cp /tmp/conf/a.txt mysql:/etc/mysql/
1.下载JDK镜像
一般使用openjdk镜像。
docker search openjdk
docker pull openjdk:8
4.IDEA项目POM依赖
<plugin>
<groupId>com.spotifygroupId>
<artifactId>docker-maven-pluginartifactId>
<version>1.2.2version>
<configuration>
<imageName>demo:1.0imageName>
<baseImage>openjdk:8baseImage>
<dockerHost>http://192.168.6.100:2375dockerHost>
<entryPoint>["java","-jar","/${project.build.finalName}.jar"]entryPoint>
<resources>
<resource>
<targetPath>/targetPath>
<directory>${project.build.directory}directory>
<include>${project.build.finalName}.jarinclude>
resource>
resources>
configuration>
plugin>
待定…
待定…
1.数据卷管理
数据卷的作用是将宿主机的某个磁盘目录映射到容器的某个目录,从而实现宿主机和容器之间的数据共享。
docker run|create --name [容器名称] -v [宿主机目录]:[容器目录] [镜像名称]
docker run --name vvv -p 3399:3306 -v /usr/local/vvv:/mydatas -d -e MYSQL_ROOT_PASSWORD=123456 mysql
3.数据卷容器管理
数据卷容器的作用是实现多个容器之间的数据共享。其实,数据卷容器也是一个容器,但是与其他Docker容器不一样的是,数据卷容器是专门用来提供数据卷给其他容器进行挂载操作。
创建数据卷容器
例:
创建两个容器,都指定my_datas为共享容器
第一个容器:
docker run --name c1 --volumes-from my_datas -e MYSQL_ROOT_PASSWORD=123456 -d mysql
第二个容器
docker run --name c2 --volumes-from my_datas -e MYSQL_ROOT_PASSWORD=123456 -d mysql