文章目录
- [1. 前言](#1. 前言)
- [2. Docker安装](#2. Docker安装)
-
- [2.1 方法 1:使用 Ubuntu 的仓库安装 Docker](#2.1 方法 1:使用 Ubuntu 的仓库安装 Docker)
- [2.2:在 Ubuntu 中安装最新稳定版本的 Docker](#2.2:在 Ubuntu 中安装最新稳定版本的 Docker)
- [3. Docker镜像](#3. Docker镜像)
-
- [3.1 拉取镜像](#3.1 拉取镜像)
- [3.2 查看镜像](#3.2 查看镜像)
- [3.3 镜像删除](#3.3 镜像删除)
- [4. Docker 常用命令](#4. Docker 常用命令)
-
- [4.1 `docker run`启动容器](#4.1
docker run
启动容器) - [4.2 `docker ps`查看容器进程](#4.2
docker ps
查看容器进程) - [4.3 `docker run -d`后台运行](#4.3
docker run -d
后台运行) - [4.4 `docker run -p` 配置网络断开](#4.4
docker run -p
配置网络断开) - [4.5 `docker run -v` 挂载目录](#4.5
docker run -v
挂载目录) - [4.6 `docker run -e`设置环境变量](#4.6
docker run -e
设置环境变量) - [4.7 `docker run --name` 给容器取名](#4.7
docker run --name
给容器取名) - [4.8 `docker run -it --rm` 交互与容器自销毁](#4.8
docker run -it --rm
交互与容器自销毁) - [4.9 `docker run --restart` 容器自重启](#4.9
docker run --restart
容器自重启) - [4.11 容器启停](#4.11 容器启停)
- [4.12 `docker inspect` 查看容器信息](#4.12
docker inspect
查看容器信息) - [4.13 `docker create`容器创建](#4.13
docker create
容器创建) - [4.14 `docker log`查看容器日志](#4.14
docker log
查看容器日志) - [4.15 `docker rm -f` 删除容器](#4.15
docker rm -f
删除容器) - [4.16 `docker exec` 使用容器内的linux命令](#4.16
docker exec
使用容器内的linux命令) - [4.17 `docker exec -it -d` 可进入容器](#4.17
docker exec -it -d
可进入容器) - [4.18 `docker run --network`容器网络管理](#4.18
docker run --network
容器网络管理) - [4.19 `docker compose`](#4.19
docker compose
)
- [4.1 `docker run`启动容器](#4.1
1. 前言
什么是Docker
Docker是一个用于开发、发布和运行应用程序的开放平台。Docker使您能够将应用程序从基础设施中分离出来,以便快速交付软件。使用Docker,您可以像管理应用程序一样管理基础架构。通过利用Docker的方法来交付、测试和部署代码,您可以显著减少编写代码和在生产环境中运行代码之间的延迟。
什么是Docker镜像
镜像是一种轻量级、可执行的独立软件包。它包含运行某个软件所需的所有内容,包含代码、运行时库、环境变量和配置文件。将所有的应用和环境直接打包到docker镜像里,并且可以直接运行。
点击可进入docker 官方文档
2. Docker安装
docker的安装首先需要机器安装了kvm
驱动,用户可以通过检查是否有/dev/kvm
或者使用lsmod
来查看
bash
ls -al /dev/kvm
#或者
lsmod | grep kvm
在 Ubuntu 上安装 Docker 有两种推荐的方法:
- 从 Ubuntu 的仓库安装 Docker:简单的单行命令,但提供旧版本
- 使用 Docker 的官方仓库:工作量稍多,但提供了最新的稳定版本
2.1 方法 1:使用 Ubuntu 的仓库安装 Docker
安装指令如下:
bash
sudo apt update
sudo apt install docker.io docker-compose
安装完成后,可以使用docker -v
来查看安装是否成功:
2.2:在 Ubuntu 中安装最新稳定版本的 Docker
1. 删除任何现有的 Docker 包
使用以下命令删除就的Docker:
bash
sudo apt remove docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc
2. 安装依赖项
bash
sudo apt install ca-certificates curl gnupg lsb-release
3. 添加 Docker 仓库的 GPG 密钥并将其添加到 sources.list
bash
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
4. 安装 Docker 和 Docker Compose
bash
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
5. 验证
上面我们讲了使用docker -v
可以用来验证安装是否成功;其实docker官方还提供了一个Hello World
镜像用以测试安装是否成功
bash
sudo docker run hello-world
出现下面日志,说明docker安装成功
shell
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
17eec7bbc9d7: Pull complete
Digest: sha256:a0dfb02aac212703bfcb339d77d47ec32c8706ff250850ecc0e19c8737b18567
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
我们也可以通过docker ps
来看出Hello World
镜像
3. Docker镜像
镜像是一种轻量级、 可执行的独立软件包,来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。
3.1 拉取镜像
可以使用docker pull
来拉起镜像
bash
sudo docker pull docker.io/library/nginx:latest
- docker.io:是docker官方仓库 Docker Hub 的注册表地址,
docker.io
表示docker的官方仓库,官方仓库可以省略仓库地址 - library:命名空间(或作者名),因为docker hub是公共仓库,每个人上传的镜像都需要加上自己的命名空间,官方命名空间
library
可以省略不写 - nginx: 镜像名
- latest:标签(版本号),我们可以指定一个特定版本号,也可以省略不写,省略时表示
latest
docker pull
还可以通过--platform
来指定下载指定平台的镜像, 默认会拉去最匹配宿主机的平台版本
3.2 查看镜像
可以使用以下命令查看当前下载的所有镜像
bash
sudo docker images
#或者
sudo docker image ls
也可以在后面加上镜像名,来只显式当前镜像的下载情况
bash
sudo docker images nginx
#或者
sudo docker image ls nginx

3.3 镜像删除
可以使用以下命令删除已下载的镜像
bash
sudo docker rmi nginx
#或者
sudo docker image rm nginx
也可以通过镜像ID来镜像删除
bash
sudo docker rmi ad5708199ec7
#或者
sudo docker image rm ad5708199ec7
4. Docker 常用命令
4.1 docker run
启动容器
docker可以通过docker run
来启动一个容器,这也是最重要的一条,最简单的指令如下:
bash
sudo docker run nginx
#或者
sudo docker run ad5708199ec7
4.2 docker ps
查看容器进程
启动后,可以通过docker ps
来查看容器状态
bash
sudo docker ps
还可以加上-a
来查看所有的容器,包括正在运行的和停止的
bash
sudo docker ps -a
4.3 docker run -d
后台运行
但是如果只是这样启动的话,当前创建就会不停地打印日志,如果想后台运行,可以使用-d
指令,让docker可以在后台执行
bash
sudo docker run -d nginx
4.4 docker run -p
配置网络断开
容器内部网络和宿主机的网络默认使用桥连接,他们是相互隔离的,如果想通过宿主机直接访问就需要配置端口映射,指令如下:
bash
sudo docker run -p 80:80 nginx
表示将宿主机的80端口转发到容器内的80端口进行处理,这样我们访问宿主机的80端口时,就等于访问到了容器内的80端口
4.5 docker run -v
挂载目录
通过-v
参数,可以将宿主机的目录挂载到容器内部来,比如
bash
sudo docker run -v ~/.ssh:~/.ssh nginx
上面指令表示我们将宿主机的~/.ssh目录挂载到了容器中,该能力常常用来做数据的持久化保存,因为当删除掉容器时,容器内的文件会被同时删除掉,但是挂载的文件,即使容器被删除,但文件依然还会保存在宿主机对应的目录里面
4.5.1 命名卷挂载
除了上面讲宿主机已有目录挂载到容器外,还可以创建一个存储空间(命名卷)来进行挂载,这种挂载方式就叫做命名卷挂载,我们可以使用以下命令来创建命名卷:
bash
sudo docker volume create nginx_html
sudo docker run -v nginx_html:/usr/share/nginx/html nginx
我们可以通过下面指令来查看挂载卷在宿主机的具体位置:
bash
sudo docker volume inspect nginx_html
如下图,它的真是目录是在/workspace/docker/volumes/nginx_html/_data
4.5.2 删除卷
使用下面命令即可删除此卷
bash
sudo docker volume inspect nginx_html
使用下面指令,可删除所有容器没有使用的卷
bash
sudo docker volume prune -a
4.6 docker run -e
设置环境变量
如下我们可以使用-e
来传递mogo
数据库的用户名和密码:
bash
sudo docker run -d -p 27017:27017 -e MOGO_INITDB_ROOT_USERNAME=admin -e MOGO_INITDB_ROOT_PASSWORD=123456 mongo
这样启动后的容器内就用了环境变量MOGO_INITDB_ROOT_USERNAME
和MOGO_INITDB_ROOT_PASSWORD
的定义。
4.7 docker run --name
给容器取名
用户可以通过--name
参数给容器取一个自定义名字,这个名字必须是独一无二的,重名就无法启动,比如:
bash
sudo docker run -d --name my_nginx nginx
使用docker ps
就可以查看当前启动了一个名叫my_nginx
的宿主机
4.8 docker run -it --rm
交互与容器自销毁
-it
: 实现对容器的交互,即启动后,自动进入容器--rm
: 当退出容器时,自动删除容器
bash
sudo docker run -it --rm alpine
当两个参数同时使用时,常用来调试一个临时容器
4.9 docker run --restart
容器自重启
bash
sudo docker run -it -d --restart always nginx
上面命令表示当容器停止了总是会自动重启容器,包含容器因为内部原因崩溃或者宿主机断电等场景
也可以使用unless-stopped
来控制如果是手动重启的容器就不会被重启
bash
sudo docker run -it -d --restart unless-stopped nginx
4.11 容器启停
- docker stop:可以停止一个正在运行的容器
- docker start:可以启动一个停止的容器
- docker restart:可以重启动一个容器
4.12 docker inspect
查看容器信息
bash
sudo docker inspect my_nginx
4.13 docker create
容器创建
docker create
命令与docker run命令非常相似,唯一不同的是docker create
只创建容器,不启动,需要手动docker start
来启动
bash
sudo docker create -p 80:80 --name my_nginx nginx
4.14 docker log
查看容器日志
bash
sudo docker log my_nginx
表示查看my_nginx
容器的日志,也可以使用容器id进行操作。
如果想查看实时日志,可以加上-f
bash
sudo docker log my_nginx -f
4.15 docker rm -f
删除容器
当删除正在运行的容器时,需要加-f
,如果容器已经停止,可以直接删除
bash
sudo docker rm -f my_nginx
4.16 docker exec
使用容器内的linux命令
比如:
bash
sudo docker exec my_nginx ps -ef
上面命令可以查出容器内的进程情况
4.17 docker exec -it -d
可进入容器
下面命令可以进入容器my_nginx
bash
sudo docker exec -it my_nginx bash
4.18 docker run --network
容器网络管理
容器与宿主机默认使用桥连接,需要使用-p
参数来进行端口转发,我们也可以使用以下命令来让容器与宿主机共享一个网络:
bash
sudo docker run -d --network host nginx
同时我们也可以使用docker network creat
来创建自定义的子网:
bash
docker network creat network1
即创建了一个network1
的子网,我们可以让多个容器运行在同一个子网下面,同一个子网的容器可以相互通信,不同子网则不能直接通信,我们可以通过这个命令创建多个子网
bash
sudo docker run -d --network network1 nginx
4.19 docker compose
使用docker-compose.yaml
文件来配置多个容器的创建
bash
sudo docker compose up -d
yaml文件的格式
shell
services:
name1:
image:mongo
environment:
MOGO_INITDB_ROOT_USERNAME:name
MOGO_INITDB_ROOT_PASSWORD:pass
name2:
image:mongo
ports:
- 8081:8081
environment:
MOGO_INITDB_ROOT_USERNAME:name
MOGO_INITDB_ROOT_PASSWORD:pass
depends_on:
- name1