FIX: docker.md add docker-compose
This commit is contained in:
parent
a511eff1cd
commit
d64ad9867c
@ -20,16 +20,6 @@ export LC_ALL=en_US.UTF-8
|
|||||||
# 自定义PATH
|
# 自定义PATH
|
||||||
export PATH=$PATH:$HOME/.local/bin:$HOME/bin
|
export PATH=$PATH:$HOME/.local/bin:$HOME/bin
|
||||||
|
|
||||||
# 彩色输出
|
|
||||||
alias ls='ls --color=auto'
|
|
||||||
alias grep='grep --color=auto'
|
|
||||||
alias fgrep='fgrep --color=auto'
|
|
||||||
alias egrep='egrep --color=auto'
|
|
||||||
|
|
||||||
# 更详细的ls别称
|
|
||||||
alias l='ls -alFh --group-directories-first'
|
|
||||||
alias la='ls -A'
|
|
||||||
# alias l='ls -CF'
|
|
||||||
|
|
||||||
# PS1提示符
|
# PS1提示符
|
||||||
|
|
||||||
@ -92,6 +82,17 @@ parse_git_branch() {
|
|||||||
# 自定义PS1提示符(带颜色和Git分支)
|
# 自定义PS1提示符(带颜色和Git分支)
|
||||||
PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[01;31m\]$(parse_git_branch)\[\033[00m\]\$ '
|
PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[01;31m\]$(parse_git_branch)\[\033[00m\]\$ '
|
||||||
|
|
||||||
|
# 彩色输出
|
||||||
|
alias ls='ls --color=auto'
|
||||||
|
alias grep='grep --color=auto'
|
||||||
|
alias fgrep='fgrep --color=auto'
|
||||||
|
alias egrep='egrep --color=auto'
|
||||||
|
|
||||||
|
# ls别称
|
||||||
|
alias l='ls -alFh --group-directories-first'
|
||||||
|
alias ll='ls -A'
|
||||||
|
# alias l='ls -CF'
|
||||||
|
|
||||||
# 安全操作确认
|
# 安全操作确认
|
||||||
alias rr='rm -i'
|
alias rr='rm -i'
|
||||||
#alias cp='cp -i'
|
#alias cp='cp -i'
|
||||||
@ -108,6 +109,9 @@ alias myip='curl ifconfig.me' # 获取公网IP
|
|||||||
# 快速重载
|
# 快速重载
|
||||||
alias reload='source ~/.bashrc'
|
alias reload='source ~/.bashrc'
|
||||||
|
|
||||||
|
# 快速使用 systemctl
|
||||||
|
alias sscl='sudo systemctl'
|
||||||
|
|
||||||
# 快速查看电池信息
|
# 快速查看电池信息
|
||||||
alias bat='upower -i /org/freedesktop/UPower/devices/battery_BAT0'
|
alias bat='upower -i /org/freedesktop/UPower/devices/battery_BAT0'
|
||||||
|
|
||||||
@ -125,3 +129,4 @@ fi
|
|||||||
|
|
||||||
# 终端启动时显示消息
|
# 终端启动时显示消息
|
||||||
echo -e "\e[1;32mWelcome to My Linux, \e[1;35m$USER!\e[0m"
|
echo -e "\e[1;32mWelcome to My Linux, \e[1;35m$USER!\e[0m"
|
||||||
|
echo -e "\e[1;34mversion:1.0\e[0m"
|
||||||
|
@ -1,22 +1,30 @@
|
|||||||
# docker
|
# docker
|
||||||
是一个开源的应用容器引擎
|
是一个开源的应用容器引擎
|
||||||
|
|
||||||
## index
|
|
||||||
- [核心组件](#)
|
|
||||||
- [install](#)
|
|
||||||
- [基本命令](#)
|
|
||||||
- [样例](#example-command)
|
|
||||||
- [数据管理](#)
|
|
||||||
- [高级用法](#)
|
|
||||||
- [daemon.json](#)
|
|
||||||
|
|
||||||
## 核心组件
|
|
||||||
+ 镜像(Image):只读模板,包含运行应用所需的所有内容,如代码、运行时、库等
|
+ 镜像(Image):只读模板,包含运行应用所需的所有内容,如代码、运行时、库等
|
||||||
+ 容器(Container):镜像的运行实例,隔离运行应用的环境
|
+ 容器(Container):镜像的运行实例,隔离运行应用的环境
|
||||||
+ 仓库(Repository):存储和分发镜像的地方,Docker Hub 是最常用的公共仓库
|
+ 仓库(Repository):存储和分发镜像的地方,Docker Hub 是最常用的公共仓库
|
||||||
|
|
||||||
|
## index
|
||||||
|
- [核心组件](#)
|
||||||
|
- [docker](#docker)
|
||||||
|
- [install](#install)
|
||||||
|
- [基本命令](#docker-command)
|
||||||
|
- [数据管理](#)
|
||||||
|
- [高级用法](#)
|
||||||
|
- [docker-compose](#docker-compose)
|
||||||
|
- [COMMAND](#docker-compose-command)
|
||||||
|
- [YAML](#docker-compose-yml)
|
||||||
|
- [daemon.json](#)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## **docker**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **install**
|
||||||
|
|
||||||
## install
|
|
||||||
+ 更新系统并安装依赖包
|
+ 更新系统并安装依赖包
|
||||||
+ 添加 Docker 官方 GPG 密钥并设置存储库
|
+ 添加 Docker 官方 GPG 密钥并设置存储库
|
||||||
+ 安装 Docker 引擎并启动服务
|
+ 安装 Docker 引擎并启动服务
|
||||||
@ -44,61 +52,69 @@ __配置/etc/docker/daemon.json__
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## 基本命令
|
---
|
||||||
|
|
||||||
|
### **docker-command**
|
||||||
1. 镜像操作
|
1. 镜像操作
|
||||||
+ `docker pull <镜像名>` : 从仓库拉取镜像
|
+ `docker pull <镜像名>` : 从仓库拉取镜像
|
||||||
+ `docker image ls` : 列出本地镜像
|
+ `docker image ls` : 列出本地镜像
|
||||||
+ `docker rmi <镜像ID>` : 删除镜像
|
+ `docker rmi <镜像ID>` : 删除镜像
|
||||||
|
+ `docker search <镜像名>` 搜索镜像
|
||||||
|
+ `docker build -t <image_name> .` 使用 Dockerfile 构建镜像
|
||||||
|
|
||||||
2. 容器操作
|
2. 容器操作
|
||||||
+ `docker run -d <镜像名>` : 创建并后台运行容器
|
+ `docker run -d <镜像名>` : 创建并后台运行容器
|
||||||
|
+ `-v` : 指定数据卷
|
||||||
|
+ `-p local_port:port` : 端口映射
|
||||||
+ `docker ps` : 列出所有运行中容器
|
+ `docker ps` : 列出所有运行中容器
|
||||||
|
+ `-a` : 包括停止的容器
|
||||||
+ `docker stop [ID / NAME]` : 停止某容器
|
+ `docker stop [ID / NAME]` : 停止某容器
|
||||||
+ `docker start [ID / NAME]` : 启动已经停止的容器
|
+ `docker start [ID / NAME]` : 启动已经停止的容器
|
||||||
+ `docker rm [ID / NAME]` : 删除容器
|
+ `docker rm [ID / NAME]` : 删除容器
|
||||||
+ `docker commit <容器ID或名称> <新镜像名称>:<标签>` 将运行中的容器保存为镜像
|
+ `docker commit <容器ID或名称> <新镜像名称>:<标签>` 将运行中的容器保存为镜像
|
||||||
+ `docker save -o my-new-image.tar my-new-image:latest` 导出为tar文件
|
+ `docker save -o my-new-image.tar my-new-image:latest` 导出为tar文件
|
||||||
+ `docker load -i my-new-image.tar` 导入镜像到目标环境
|
+ `docker load -i my-new-image.tar` 导入镜像到目标环境
|
||||||
|
|
||||||
3. 其他
|
|
||||||
+ `docker search <镜像名>` 搜索镜像
|
|
||||||
+ `docker logs <容器ID>` : 查看容器日志
|
+ `docker logs <容器ID>` : 查看容器日志
|
||||||
+ `docker exec -it [ID / NAME] /bin/bash` : 进入容器
|
+ `docker exec -it [ID / NAME] /bin/bash` : 进入容器
|
||||||
|
|
||||||
|
3. 其他
|
||||||
+ `c-P c-Q` : 退出容器
|
+ `c-P c-Q` : 退出容器
|
||||||
+ `sudo systemctl daemon-reload && sudo systemctl restart docker` 重启
|
+ `sudo systemctl daemon-reload && sudo systemctl restart docker` 重启
|
||||||
+ `docker load < xxx.tar` #导入tar为镜像
|
|
||||||
+ `docker commit [ID] [镜像名]` #容器保存为镜像
|
|
||||||
|
|
||||||
### example-command
|
4. example-command
|
||||||
> `docker pull ubuntu` 拉取 Ubuntu 镜像
|
+ `docker run -it ubuntu /bin/bash` 运行 Ubuntu 容器并进入交互式 shell
|
||||||
> `docker run -it ubuntu /bin/bash` 运行 Ubuntu 容器并进入交互式 shell
|
+ `docker run -it --name mc-ser ubuntu -v /opt/mc:/opt/mc -p 25565:25565 /bin/bash`
|
||||||
> `docker 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)、绑定挂载(Bind Mounts) 和 临时文件系统(tmpfs)
|
||||||
|
|
||||||
1. Docker 数据卷(Volumes)
|
1. Docker 数据卷(Volumes)
|
||||||
数据卷是 Docker 推荐的数据持久化方式。数据卷存储在 Docker 管理的文件系统中(通常是 /var/lib/docker/volumes/),与容器的生命周期分离,即使容器被删除,数据卷仍然存在
|
是 Docker 推荐的数据持久化方式。数据卷存储在 Docker 管理的文件系统中(通常是 /var/lib/docker/volumes/),与容器的生命周期分离,即使容器被删除,数据卷仍然存在
|
||||||
|
|
||||||
+ 持久化:数据卷独立于容器,容器删除后数据仍然保留。
|
|
||||||
+ 高性能:数据卷通常比绑定挂载性能更好。
|
+ 高性能:数据卷通常比绑定挂载性能更好。
|
||||||
+ 易于备份和迁移:数据卷可以通过 Docker 命令轻松备份和恢复。
|
+ 易于备份和迁移:数据卷可以通过 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` 清理未使用的数据卷
|
||||||
|
+ 迁移Volume数据
|
||||||
|
```bash
|
||||||
|
# 1. 运行临时容器挂载 Volume,并将数据打包到容器内
|
||||||
|
docker run --rm -v your_volume:/data busybox tar cvf /backup/data.tar /data
|
||||||
|
|
||||||
> `docker volume create my_volume` 创建数据卷
|
# 2. 从容器中复制备份文件到宿主机
|
||||||
> `docker volume ls` 查看数据卷
|
docker cp <container_id>:/backup/data.tar ./data.tar
|
||||||
> `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` 清理未使用的数据卷
|
|
||||||
|
|
||||||
2. 绑定挂载(Bind Mounts)
|
# 3. 恢复时反向操作:将 data.tar 复制回新容器,并解压到 Volume
|
||||||
绑定挂载是将主机上的文件或目录直接挂载到容器中
|
```
|
||||||
|
|
||||||
|
2. 绑定挂载
|
||||||
|
将主机上的文件或目录直接挂载到容器中
|
||||||
|
|
||||||
+ 灵活性:可以直接挂载主机上的任意文件或目录。
|
+ 灵活性:可以直接挂载主机上的任意文件或目录。
|
||||||
+ 实时同步:主机和容器之间的文件修改会实时同步。
|
+ 实时同步:主机和容器之间的文件修改会实时同步。
|
||||||
+ 依赖主机文件系统:绑定挂载的路径必须存在于主机上。
|
|
||||||
|
|
||||||
- `docker run -d --name my_container -v /host/path:/container/path <image_name>` 挂载主机目录到容器
|
- `docker run -d --name my_container -v /host/path:/container/path <image_name>` 挂载主机目录到容器
|
||||||
|
|
||||||
3. 临时文件系统(tmpfs)
|
3. 临时文件系统(tmpfs)
|
||||||
@ -110,16 +126,15 @@ tmpfs 是一种基于内存的文件系统,适用于需要临时存储数据
|
|||||||
`docker run -d --name my_container --tmpfs /container/path <image_name>` 挂载 tmpfs 到容器
|
`docker run -d --name my_container --tmpfs /container/path <image_name>` 挂载 tmpfs 到容器
|
||||||
|
|
||||||
4. 数据卷的高级用法
|
4. 数据卷的高级用法
|
||||||
多个容器可以共享同一个数据卷,实现数据共享
|
|
||||||
```
|
|
||||||
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>`
|
|
||||||
|
|
||||||
## 高级用法
|
+ 可以将数据卷或绑定挂载设置为只读,防止容器修改数据
|
||||||
|
- `docker run -d --name my_container -v my_volume:/data:ro <image_name>`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 高级用法
|
||||||
1. Dockerfile
|
1. Dockerfile
|
||||||
Dockerfile 是用于构建镜像的脚本文件,包含一系列指令,用于定义镜像的构建过程
|
Dockerfile 是用于构建镜像的脚本文件,包含一系列指令,用于定义镜像的构建过程
|
||||||
```
|
```
|
||||||
@ -149,36 +164,77 @@ ENV NAME World
|
|||||||
# 运行命令
|
# 运行命令
|
||||||
CMD ["python3", "app.py"]
|
CMD ["python3", "app.py"]
|
||||||
```
|
```
|
||||||
`docker build -t <image_name> .` 构建镜像
|
|
||||||
|
|
||||||
2. Docker 网络
|
2. Docker 网络
|
||||||
`docker network create <network_name>` 创建网络
|
- `docker network create <network_name>` 创建网络
|
||||||
|
- `docker network ls` 查看网络
|
||||||
|
- `docker network connect <network_name> <container_id>` 连接容器到网络
|
||||||
|
|
||||||
`docker network ls` 查看网络
|
3. Docker 安全
|
||||||
|
- 使用非 root 用户运行容器
|
||||||
`docker network connect <network_name> <container_id>` 连接容器到网络
|
|
||||||
|
|
||||||
3. Docker 数据管理
|
|
||||||
`docker volume create <volume_name>` 创建数据卷
|
|
||||||
|
|
||||||
`docker volume ls` 查看数据卷
|
|
||||||
|
|
||||||
`docker run -v <volume_name>:/path/in/container <image_name>` 挂载数据卷到容器
|
|
||||||
|
|
||||||
4. Docker 资源限制
|
|
||||||
`docker run -m 512m <image_name>` 限制内存
|
|
||||||
|
|
||||||
`docker run --cpus="1.5" <image_name>` 限制 CPU
|
|
||||||
|
|
||||||
5. Docker 安全
|
|
||||||
> 使用非 root 用户运行容器
|
|
||||||
```dockerfile
|
```dockerfile
|
||||||
FROM ubuntu
|
FROM ubuntu
|
||||||
RUN useradd -m myuser
|
RUN useradd -m myuser
|
||||||
USER myuser
|
USER myuser
|
||||||
```
|
```
|
||||||
> 限制容器权限
|
|
||||||
`docker run --cap-drop=ALL --cap-add=NET_BIND_SERVICE <image_name>`
|
---
|
||||||
|
|
||||||
|
## **docker-compose**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### docker-compose-command
|
||||||
|
|
||||||
|
- `docker-compose build` 构建镜像
|
||||||
|
- `docker-compose up -d` 启动在后台运行
|
||||||
|
- `docker-compose up -d --build` 重建并运行
|
||||||
|
- `docker-compose down` 停止并删除容器
|
||||||
|
- `docker-compose logs -f <server>` 查看服务日志
|
||||||
|
- `docker-compose ps` 查看运行状态
|
||||||
|
- `docker-compose exec` 进入容器执行命令
|
||||||
|
- `docker-compose pull` 拉取最新镜像
|
||||||
|
- `docker-compose config` 检查配置语法是否正确
|
||||||
|
- `docker-compose stop` 停止容器
|
||||||
|
- `docker-compose start` 启动停止的容器
|
||||||
|
- `docker-compose restart` stop + start
|
||||||
|
- `docker-compose pause` 挂起,不释放资源
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### docker-compose-yml
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
version: '3.8' # 指定 Compose 版本(与 Docker 版本兼容性相关)
|
||||||
|
|
||||||
|
services:
|
||||||
|
myapp: # 服务名称(容器间通过此名称通信)
|
||||||
|
image: nginx:latest # 使用镜像
|
||||||
|
container_name: myapp # 容器名
|
||||||
|
# build: . # 基于当前目录的 Dockerfile 构建镜像
|
||||||
|
restart: always # 重启策略
|
||||||
|
ports: # 端口映射
|
||||||
|
- "80:80"
|
||||||
|
volumes:
|
||||||
|
- ./html:/usr/share/nginx/html # 挂载宿主机目录
|
||||||
|
depends_on:
|
||||||
|
- db # 依赖的服务(仅控制启动顺序,不保证服务就绪)
|
||||||
|
|
||||||
|
db:
|
||||||
|
image: postgres:13
|
||||||
|
environment:
|
||||||
|
POSTGRES_PASSWORD: example
|
||||||
|
volumes:
|
||||||
|
- postgres_data:/var/lib/postgresql/data # 使用命名卷
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
postgres_data: # 声明命名卷(由 Docker 自动管理)
|
||||||
|
|
||||||
|
networks: # 定义网络
|
||||||
|
mynet:
|
||||||
|
driver: bridge
|
||||||
|
```
|
||||||
|
|
||||||
## daemon.json
|
## daemon.json
|
||||||
```
|
```
|
||||||
|
Loading…
x
Reference in New Issue
Block a user