Docker安装与使用

本文最后更新于 2024年5月19日 晚上

Docker安装与使用

Docker的安装

安装包括 ubuntu 和 CentOS 两个系统

CentOS

这里先附上官方文档地址:Install Docker Engine on CentOS | Docker Docs

1. 卸载旧版本的docker或docker engine

在尝试安装任何新版本 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

yum 有可能会告诉你并没有已经安装的旧版本

2. 设置仓库地址

1
2
sudo yum install -y yum-utils
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

3. 安装docker

1
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

4. 启动docker

1
sudo systemctl start docker

5. 检查安装

docker -v 检查docker版本

sudo docker images 查看本地所有镜像

Ubuntu

现附上官方文档地址:Install Docker Engine on Ubuntu | Docker Docs

1. 删除所有可能冲突的包

1
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done

使用 apt-get 可能报告你没有安装这些包

2. 设置仓库地址

1
2
3
4
5
6
7
8
9
10
11
12
13
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

3. 安装Docker

1
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

4. 使用hello-world镜像启动测试

1
sudo docker run hello-world

出现这样就是安装完成了:

测试成功样例

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镜像的步骤:

  1. 准备一个Linux环境
  2. 安装KRE并配置环境变量
  3. 拷贝Jar包
  4. 编写运行脚本

镜像结构

入口(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
2
3
4
5
6
7
8
9
# 基础镜像
FROM openjdk:11.0-jre-buster
# 设定时区
ENV TZ=Asia/Shanghai
RUN ln -snf /user/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 拷贝jar包
COPY docker-demo.jar /app.jar
# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]

当编写好了Dockerfile,可以利用下面命令来构建镜像:

1
docker build -t myImage:1.0 .
  • -t:是给镜像起名,格式依然是repository:tag的格式,不指定tag时,默认为latest
  • .:是指定Dockerfile所在目录,如果在当前目录,则指定为 “.”

Docker安装与使用
http://cloudyw.cn/2024/05/16/Docker安装与使用/
作者
cloudyW
发布于
2024年5月16日
许可协议