Docker安装与使用
本文最后更新于 2024年5月19日 晚上
Docker安装与使用
Docker的安装
安装包括 ubuntu 和 CentOS 两个系统
CentOS
这里先附上官方文档地址:Install Docker Engine on CentOS | Docker Docs
1. 卸载旧版本的docker或docker engine
在尝试安装任何新版本 docker 时都要卸载旧版本,可以执行以下代码:
1 |
|
yum 有可能会告诉你并没有已经安装的旧版本
2. 设置仓库地址
1 |
|
3. 安装docker
1 |
|
4. 启动docker
1 |
|
5. 检查安装
docker -v
检查docker版本
sudo docker images
查看本地所有镜像
Ubuntu
现附上官方文档地址:Install Docker Engine on Ubuntu | Docker Docs
1. 删除所有可能冲突的包
1 |
|
使用 apt-get
可能报告你没有安装这些包
2. 设置仓库地址
1 |
|
3. 安装Docker
1 |
|
4. 使用hello-world镜像启动测试
1 |
|
出现这样就是安装完成了:
Docker的使用
Docker内容解析
镜像:在使用Docker安装应用时,Docker会自动搜索并下载镜像(image)。镜像不仅包含应用本身,还包含应用运行所需要的环境、配置、系统函数库。
容器:Docker在运行镜像时会创建一个隔离环境,称为容器。
镜像仓库:存储和管理镜像的平台,Docker官方维护了一个公共仓库:Docker Hub
PS: 可以修改Docker的镜像源以让下载更快
执行
vi /etc/docker/daemon.json
创建 daemon.json 文件在文件中输入以下内容:
1
2
3{
"registry-mirrors": ["https://3laho3y3.mirror.aliyuncs.com"]
}重启docker
systemctl daemon-reload
systemctl restart docker
常用命令
命令示例:docker run -d --name mysql -p 3306:3306 -e TZ=Asia/Shanghai -e MYSQL_ROOT_PASSWORD=123 mysql
docker run: 创建并运行一个容器,-d是在后台运行
–name ***: 给容器起名字,必须唯一
-p 3306:3306: 设置端口映射
-e KEY=VALUE: 设置环境变量
mysql: 指定运行的镜像的名称。镜像名称由两部分组成:[repository]:[tag]。其中 repository 是镜像名,tag 是版本号。在没有指定 tag 时默认为 latest,代表最新版本
命令 | 含义 |
---|---|
docker pull | 从镜像仓库拉取镜像 |
docker images | 查看所有本地镜像 |
docker rmi | 移除镜像 |
docker build | 将docker file打包成镜像 |
docker save | 将打包好的镜像保存到本地为压缩文件 |
docker load | 将镜像的压缩文件加载 |
docker push | 推送镜像到镜像仓库 |
docker run | 创建并运行容器 |
docker stop | 停止容器,其实是停止该容器的进程 |
docker start | 将停止的容器进程再次启动 |
docker ps | 查看当前容器的运行状态 |
docker rm | 删除容器 |
docker logs | 查看容器运行日志 |
docker exec | 进入容器 |
数据卷
数据卷(volume)是一个虚拟目录,是容器内目录与宿主机目录之间映射的桥梁。
创建数据卷,固定位置:var/lib/docker/volumes/***(目标文件夹)/data
命令 | 说明 |
---|---|
docker volume create | 创建数据卷 |
docker volume ls | 查看所有数据卷 |
docker volume rm | 删除指定数据卷 |
docker volume inspect | 查看某个数据卷的详情 |
docker volume prune | 清除数据卷 |
- 在执行 docker run 命令时,使用 -v 数据卷:容器内目录 可以完成数据卷挂载
- 在执行 docker run 命令时,使用 -v 数据卷:本地目录 可以完成数据卷挂载
- 本地目录必须以”/“或”./“开头,如果直接以名称开头,会被识别为数据卷为非本地目录
- -v mysql : /var/lib/mysql 会被识别为一个数据卷叫 mysql
- -v ./mysql : /var/lib/mysql 会被识别为当前目录下的 mysql 目录
- 本地目录必须以”/“或”./“开头,如果直接以名称开头,会被识别为数据卷为非本地目录
当创建容器时,如果挂载了数据卷且数据卷不存在,会自动创建数据卷
自定义镜像
镜像就是包含了应用程序、程序运行的系统函数库、运行配置等文件的文件包。构建镜像的过程其实就是把上述文件打包的过程。
构建一个Java镜像的步骤:
- 准备一个Linux环境
- 安装KRE并配置环境变量
- 拷贝Jar包
- 编写运行脚本
镜像结构
入口(Entrypoint)
镜像运行入口,一般是程序启动的脚本和参数
层(Layer)
添加安装包、依赖、配置等,每次操作都形成新的一层
基础镜像(BaseImage)
应用依赖的系统函数库、环境、配置、文件等
DockerFile
Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。将来Docker可以根据Dockerfile帮我们构建镜像。常见指令如下:
指令 | 说明 | 示例 |
---|---|---|
FROM | 指定基础镜像 | FROM centos:6 |
ENV | 设置环境变量,可以在后面指令使用 | ENV key value |
COPY | 拷贝本地文件到镜像的指定目录 | COPY ./jrell.tar.gz /tmp |
RUN | 执行Linux的shell命令,一般是安装过程的命令 | RUN tar -zxvf /tmp/jrell.tar.gz && EXPORTS path=/tmp/jrell:$path |
EXPOSE | 指定容器运行时监听的端口,是给镜像的使用者看的 | EXPOSE 8080 |
ENTRYPOINT | 镜像中应用的启动命令,容器运行时调用 | ENTRYPOINT java -jar xx.jar |
过于麻烦的不用去记,可以直接使用配置好的 JDK 镜像:
1 |
|
当编写好了Dockerfile,可以利用下面命令来构建镜像:
1 |
|
-t
:是给镜像起名,格式依然是repository:tag的格式,不指定tag时,默认为latest.
:是指定Dockerfile所在目录,如果在当前目录,则指定为 “.”