调整到老博客的程度

This commit is contained in:
2026-07-17 10:20:54 +08:00
commit fadeeb8913
189 changed files with 45297 additions and 0 deletions
+163
View File
@@ -0,0 +1,163 @@
---
title: docker简单笔记
date: 2023-12-25T09:06:25+08:00
lastmod: 2023-12-25T09:06:25+08:00
draft: false
description: ''
authors:
- Kushidou
tags:
- linux
- docker
- 容器和虚拟化
categories: []
toc: true
comments: true
---
学习docker,使用docker,编写docker
<!--more-->
## 前言
祝自己圣诞节快乐,去年的愿望是“明年不要一个人过圣诞”,今年的愿望也是“明年不要一个人过圣诞”。
不扯了,docker,又称容器,是一种高效的虚拟化技术,能够在不启动虚拟机的情况下,创建一套虚拟环境,方便调试程序,配置环境,乃至直接抄别人的配置。docker还有一个进阶的docker compose,支持多个容器之间组合互联组成一套完整环境。
由于docker比较复杂,又没有官方支持的gui界面~~(在官网看好像有了?但是就当他没有吧。)~~;中文环境的文档、教程都冗长复杂不想看,因此docker一直是我学习路上的一个绕路点。今天打算突破它,记录最简单的docker指令和方法。
## 安装docker和docker compose
虽然阿里ECS之类的云主机大多预装了docker,但是海外主机、自己装的linux系统大多还是没有docker的,我们从安装开始。以ubuntu为例。
apt仓库提供的docker-io等软件包是社区构建的非官方版本,要安装官方版,需要多几个步骤。
```bash
# 添加docker官方的gpg
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 在/etc/apt/source.list.d 里面添加docker的源地址,借用官网的一行指令直接添加
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 我这边添加的结果是
deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu jammy stable
```
然后可以通过apt源安装docker了
```bash
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
```
**注意,上面的指令同时安装了docker-compose*。如果不安装docker,直接安装docker-compose也是可以的。
```bash
wget https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-linux-x86_64
sudo cp ./docker-compose-linux-x86_64 /usr/bin/docker-compose
```
更加具体的步骤和细节可以到官网查看:[docker安装](https://docs.docker.com/engine/install/ubuntu/)、[docker-compose安装](https://docs.docker.com/compose/install/standalone/)
## docker 基本使用方法
使用一个docker镜像的步骤是【拉取镜像、创建容器、运行容器、停止容器】,一般创建和运行通过同一条指令实现。
```bash
# 拉取一个镜像
docker pull xxx/yyy
# 创建容器并运行
docker run --name aaa xxx/yyy
# 停止容器
docker stop docker-id
```
关于运行容器,有很多常用的参数:
> -d 容器转入后台运行
>
> -e 设置容器的环境变量
>
> --name 容器名称
>
> -p 80:80 将暴露的端口映射到容器内端口,外部:内部
>
> -v f:c 将一个文件(卷)映射到容器内部的文件,支持文件和文件夹。外:内
>
> -e、-p、-v 参数都可以多次使用,达到添加多个变量的目的。
停止容器支持多种类型的参数,包括容器ID和容器名称。容器ID可以只写出部分,能够区分容器即可。
查询容器id,可以使用指令`docker ps`。docker还有其他几个查询和控制指令
> `docker exec 容器 指令` 允许在外部执行docker内的指令,添加 -d 参数转入后台运行。
>
> `docker ps` 列出正在运行的docker容器信息。添加 -a 参数查看所有容器,包括已经停止的。
>
> `docker images` 列出已经下载的镜像列表。与 `docker image` 指令不同。
>
> `docker kill 容器名/id` 杀死一个无法stop的容器
>
> `docker rm 容器` 删除一个**容器**
>
> `docker rmi 镜像名` 删除一个**镜像**
>
> `docker restart 容器ID` 重启一个容器,毕竟我们不需要每次都创建新容器。
关于docker运行时需要哪些端口,可以通过镜像的docker hub页面进行判断。
## 更换docker镜像源
和apt源、github一样,docker镜像源服务器在国外,国内访问可能很慢,遇到这个情况可以更换成国内的镜像源。
修改`/etc/docker/daemon.json`文件,添加下面的内容:
```json
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn"
]
}
```
编辑完成后需要重启docker服务。
具体的源地址可以进行搜索和尝试,我访问速度还行就没有更换。
## docker-compose
docker compose是通过ymal配置文件来启动容器的,它支持将多个容器组合启动,并自动处理依赖关系。在docker compose中我们不需要拉取镜像,直接在配置文件中指定镜像名,在启动后会自动拉取。
首先创建一个工作目录,并创建一个`docker-compose.yml`的文件,默认情况下docker compose指令只认这个文件名。
```ymal
version: '3'
services:
[NAME1]:
image: "image/name"
ports:
- 81:80
- 80808080
environment:
HOSTNAME: "cc"
PORT: 8181
volumes:
- nginx-data:/etc/nginx
[NAME2]:
image: 'xxx'
```
docker compose的ymal文件可以实现十分复杂的功能,我暂时也没搞懂,就只放一个基础结构的文件在这里。与docker run指令相同,`ports`字段指定了内外端口的映射,即'外部:内部',卷映射同理。`environment`不需要 - 开头。
编写完ymal文件,就可以启动容器组了。首先切换到文件所在的目录,即工作目录,然后执行指令直接启动
> `docker compose up` 启动容器,查找当前目录下的ymal文件。-d 参数可以转入后台运行。 -f参数可以指定ymal文件。
>
> `docker compose down` 停止容器,并删除对应的容器和网络
>
> `docker compose exec NAME command` 在ymal文件内其中一个容器里运行指令
docker compose指令必须是要有ymal文件才能运行的,它通过这个文件来寻找有关的网络和容器。
目前浅学了一下,只有学一点更新一点吧。