Files
blog-tech/content/posts/231225-dockernote.md
T
2026-07-17 10:20:54 +08:00

164 lines
6.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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文件才能运行的,它通过这个文件来寻找有关的网络和容器。
目前浅学了一下,只有学一点更新一点吧。