
BIG ADD: - docker - archlinux FIX: - vim - c_cpp - string hash - linux /dev/random - thread - STL - linux - command - last OTHERS: - add antenna.md - mirrors - makefile.md
6.9 KiB
docker
是一个开源的应用容器引擎
目录
核心组件
- 镜像(Image):只读模板,包含运行应用所需的所有内容,如代码、运行时、库等
- 容器(Container):镜像的运行实例,隔离运行应用的环境
- 仓库(Repository):存储和分发镜像的地方,Docker Hub 是最常用的公共仓库
install
- 更新系统并安装依赖包
- 添加 Docker 官方 GPG 密钥并设置存储库
- 安装 Docker 引擎并启动服务
- 设置 Docker 开机自启
sudo apt-get update
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
echo "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee -a /etc/apt/sources.list.d/docker.list
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
# 验证安装
sudo docker --version
配置/etc/docker/daemon.json
{
"registry-mirrors":
[
"https://dockerproxy.com",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.nju.edu.cn"
]
}
基本命令
- 镜像操作
docker pull <镜像名>
: 从仓库拉取镜像docker image ls
: 列出本地镜像docker rmi <镜像ID>
: 删除镜像
- 容器操作
docker run -d <镜像名>
: 创建并后台运行容器docker ps
: 列出所有运行中容器docker stop [ID / NAME]
: 停止某容器docker start [ID / NAME]
: 启动已经停止的容器docker rm [ID / NAME]
: 删除容器docker commit <容器ID或名称> <新镜像名称>:<标签>
将运行中的容器保存为镜像docker save -o my-new-image.tar my-new-image:latest
导出为tar文件docker load -i my-new-image.tar
导入镜像到目标环境
- 其他
docker search <镜像名>
搜索镜像docker logs <容器ID>
: 查看容器日志docker exec -it [ID / NAME] /bin/bash
: 进入容器c-P c-Q
: 退出容器sudo systemctl daemon-reload && sudo systemctl restart docker
重启docker load < xxx.tar
#导入tar为镜像docker commit [ID] [镜像名]
#容器保存为镜像
example-command
docker pull ubuntu
拉取 Ubuntu 镜像docker run -it ubuntu /bin/bash
运行 Ubuntu 容器并进入交互式 shelldocker ps -a
列出所有容器(包括停止的)docker run -it --name mc-ser ubuntu -v /opt/mc:/opt/mc -p 25565:25565 /bin/bash
数据管理
为了持久化数据,Docker 提供了多种数据管理方式,主要包括 数据卷(Volumes)、绑定挂载(Bind Mounts) 和 临时文件系统(tmpfs)
- Docker 数据卷(Volumes) 数据卷是 Docker 推荐的数据持久化方式。数据卷存储在 Docker 管理的文件系统中(通常是 /var/lib/docker/volumes/),与容器的生命周期分离,即使容器被删除,数据卷仍然存在
- 持久化:数据卷独立于容器,容器删除后数据仍然保留。
- 高性能:数据卷通常比绑定挂载性能更好。
- 易于备份和迁移:数据卷可以通过 Docker 命令轻松备份和恢复。
docker volume create my_volume
创建数据卷docker volume ls
查看数据卷docker volume inspect my_volume
查看数据卷详细信息docker run -d --name my_container -v my_volume:/path/in/container <image_name>
挂载数据卷到容器docker volume rm my_volume
删除数据卷docker volume prune
清理未使用的数据卷
- 绑定挂载(Bind Mounts) 绑定挂载是将主机上的文件或目录直接挂载到容器中
- 灵活性:可以直接挂载主机上的任意文件或目录。
- 实时同步:主机和容器之间的文件修改会实时同步。
- 依赖主机文件系统:绑定挂载的路径必须存在于主机上。
docker run -d --name my_container -v /host/path:/container/path <image_name>
挂载主机目录到容器
- 临时文件系统(tmpfs) tmpfs 是一种基于内存的文件系统,适用于需要临时存储数据的场景。数据仅存储在内存中,容器停止后数据会丢失
- 高性能:数据存储在内存中,读写速度快。
- 临时性:数据不会持久化,容器停止后数据丢失。
docker run -d --name my_container --tmpfs /container/path <image_name>
挂载 tmpfs 到容器
- 数据卷的高级用法 多个容器可以共享同一个数据卷,实现数据共享
docker run -d --name container1 -v my_volume:/data <image_name>
docker run -d --name container2 -v my_volume:/data <image_name>
可以将数据卷或绑定挂载设置为只读,防止容器修改数据
docker run -d --name my_container -v my_volume:/data:ro <image_name>
高级用法
- Dockerfile Dockerfile 是用于构建镜像的脚本文件,包含一系列指令,用于定义镜像的构建过程
# 使用基础镜像
FROM ubuntu:latest
# 维护者信息
MAINTAINER Your Name <your.email@example.com>
# 更新包索引并安装软件
RUN apt-get update && apt-get install -y \
software-properties-common \
python3
# 设置工作目录
WORKDIR /app
# 复制当前目录下的文件到容器中的 /app 目录
COPY . /app
# 暴露端口
EXPOSE 80
# 设置环境变量
ENV NAME World
# 运行命令
CMD ["python3", "app.py"]
docker build -t <image_name> .
构建镜像
- Docker 网络
docker network create <network_name>
创建网络
docker network ls
查看网络
docker network connect <network_name> <container_id>
连接容器到网络
- Docker 数据管理
docker volume create <volume_name>
创建数据卷
docker volume ls
查看数据卷
docker run -v <volume_name>:/path/in/container <image_name>
挂载数据卷到容器
- Docker 资源限制
docker run -m 512m <image_name>
限制内存
docker run --cpus="1.5" <image_name>
限制 CPU
- Docker 安全
使用非 root 用户运行容器
FROM ubuntu
RUN useradd -m myuser
USER myuser
限制容器权限
docker run --cap-drop=ALL --cap-add=NET_BIND_SERVICE <image_name>
daemon.json
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.xuanyuan.me",
"https://docker.zhai.cm",
"https://a.ussh.net",
"https://hub.littlediary.cn",
"https://hub.rat.dev",
"https://atomhub.openatom.cn",
"https://docker.m.daocloud.io",
"https://dytt.online",
"https://func.ink",
"https://lispy.org",
"https://docker.xiaogenban1993.com",
"https://docker.mybacc.com",
"https://docker.yomansunter.com",
"https://dockerhub.websoft9.com",
"https://docker-0.unsee.tech",
"https://docker-cf.registry.cyou",
"https://docker.1panel.live",
"https://docker.imgdb.de",
"https://docker.hlmirror.com",
"https://dockerpull.org",
"https://dockerhub.icu",
"https://proxy.1panel.live",
"https://docker.1panel.top",
"https://docker.ketches.cn"
]
}