Appearance
Docker 使用笔记
Docker 安装
清华的镜像安装
shell
export DOWNLOAD_URL="https://mirrors.tuna.tsinghua.edu.cn/docker-ce"
# 如您使用 curl
curl -fsSL https://get.docker.com/ | sh
# 如您使用 wget
wget -O- https://get.docker.com/ | shCentOS 安装 Docker
以下是 docker 官网的安装教程,我只是将命令都提取出来
按下列顺序逐步输入即可
shell
sudo yum install -y yum-utilsshell
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo如果下载速度太慢的话可以用阿里云的镜像
shellsudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
shell
sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-pluginshell
sudo systemctl start docker验证docker 是否成功安装
shell
sudo docker run hello-worldUbuntu 安装 Docker
以下是 docker 官网的安装教程,我只是将命令都提取出来
按下列顺序逐步输入即可
shell
sudo apt-get updateshell
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-releaseshell
sudo mkdir -p /etc/apt/keyringsshell
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg国内源
shell
curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -shell
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国内源
shell
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"shell
sudo apt-get updateshell
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin验证docker 是否成功安装
shell
sudo docker run hello-world若出现
输入
shell
sudo usermod -aG docker $USER
newgrp docker即可。
Docker 常用命令
docker pull mysql:latest:拉取一个镜像
docker images:列出本地所有镜像
docker image rm mysql:latest 或docker rmi mysql:latest:删除镜像mysql:latest
docker [container] commit CONTAINER IMAGE_NAME:TAG:创建某个container 的镜像
docker save -o gettler.tar mysql:latest:将镜像mysql:latest 导出到本地文件gettler.tar 中
docker load -i gettler.tar:将镜像mysql:latest 从本地文件gettler.tar 中加载出来
docker [container] create -it mysql:latest:利用镜像mysql:latest 创建一个容器。
docker ps -a:查看本地的所有容器
docker [container] start CONTAINER:启动容器
docker [container] stop CONTAINER:停止容器
docker [container] restart CONTAINER:重启容器
docker [contaienr] run -itd mysql:latest:创建并启动一个容器
docker [container] attach CONTAINER:进入容器先按 Ctrl-p,再按 Ctrl-q 可以挂起容器
docker [container] exec CONTAINER COMMAND:在容器中执行命令
docker [container] rm CONTAINER:删除容器
docker container prune:删除所有已停止的容器
docker export -o xxx.tar CONTAINER:将容器CONTAINER 导出到本地文件xxx.tar 中
docker import xxx.tar image_name:tag:将本地文件xxx.tar 导入成镜像,并将镜像命名为image_name:tag
docker export/import 与docker save/load 的区别:-
export/import 会丢弃历史记录和元数据信息,仅保存容器当时的快照状态 - save/load 会保存完整记录,体积更大
-
docker top CONTAINER:查看某个容器内的所有进程
docker stats:查看所有容器的统计信息,包括 CPU、内存、存储、网络等信息
docker cp xxx CONTAINER:xxx 或docker cp CONTAINER:xxx xxx:在本地和容器间复制文件
docker rename CONTAINER1 CONTAINER2:重命名容器
docker update CONTAINER --memory 500MB:修改容器限制docker run [OPTIONS] IMAGE [COMMAND] [ARG...]OPTIONS 说明:
- -d: 后台运行容器,并返回容器 ID;
- -i: 以交互模式运行容器,通常与 -t 同时使用;
- -P: 随机端口映射,容器内部端口随机映射到主机的端口
- -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
- -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
- 例如:
docker run -p 20000:22 -p 8000:8000 --name django_server -itd django_lesson:1.0 运行django_lesson:1.0 镜像
Docker 数据卷
数据卷概念
- 数据卷是宿主机中的一个文件或目录
- 当容器目录和数据卷目录绑定后,对方的修改会立即同步
- 一个数据卷可以被多个容器挂载
- 一个容器可以挂载多个数据卷
数据卷作用
- 容器数据持久化
- 外部机器和内部容器间接通信
- 容器之间进行数据交换
配置数据卷
docker run ... -v 宿主机文件:容器内文件1. 目录必须是绝对路径
2. 如果目录不存在,会自动创建
3. 可以挂载多个数据卷
Docker 镜像
Docker 网络设置
网络模式
| 网络模式 | 配置 | 说明 |
|---|---|---|
| bridge 模式 | --net=bridge | (默认为该模式)此模式会为每一个容器分配、设置 IP 等,并将容器连接到一个 docker0 虚拟网桥,通过 docker0 网桥以及 Iptables nat 表配置与宿主机通信。 |
| host 模式 | --net=host | 容器和宿主机共享 Network namespace。 |
| container 模式 | --net=container:NAME_or_ID | 容器和另外一个容器共享 Network namespace。 kubernetes 中的 pod 就是多个容器共享一个 Network namespace。 |
| none 模式 | --net=none | 该模式关闭了容器的网络功能。 |
将容器连接到网络
shell
docker network connect断开容器的网络
shell
docker network disconnect不指定网络驱动时默认创建的 bridge 网络
shell
docker network create my_net查看网络内部信息
shell
docker network inspect my_net
**```
列所有列表的网络
```shell
docker network ls移除指定的网络
shell
docker network rm my_net运行容器并连接自定义的网络
shell
docker run -itd --network=my_net --ip 192.168.21.100 -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:8.0Docker 配置镜像源
vim /etc/docker/daemon.json 添加以下内容:
yaml
{
"registry-mirrors": [
"https://hub-mirror.c.163.com",
"https://ustc-edu-cn.mirror.aliyuncs.com",
"https://ghcr.io",
"https://mirror.baidubce.com"
]
}yaml
{
"registry-mirrors": [
"https://dockerproxy.com",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com",
"https://ccr.ccs.tencentyun.com"
]
}{
"insecure-registries": ["192.168.30.12"]
}Docker 实操记录
配置阿里云镜像
shell
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://u5po9ti9.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart dockerDocker 安装 MySQL
先拉取官方的最新版本的镜像:
shell
docker pull mysql:latest
运行容器
shell
docker run -itd --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=73748156 mysqlshell
docker run -itd -e MYSQL_ROOT_PASSWORD=73748156 --restart=always --name mysql -v /data/mysql/my.cnf:/etc/mysql/my.cnf -v /data/mysql/data:/var/lib/mysql -p 3306:3306 mysql:5.7
docker exec -it mysql /bin/bash
mysql -u root -p
73748156
create user 'power'@'%' identified by '73748156';
grant all privileges on *.* to 'power'@'%';
use mysql
update user set host = "localhost" where user = "root" and host = "%";
delete from user where user = "root" and host = "%";
flush privileges;Docker 安装 Redis
shell
docker run --restart=always --name redis -v /data/redis/redis.conf:/etc/redis/redis.conf -v /data/redis/data:/data -p 6379:6379 -d redis:latest redis-server /etc/redis/redis.conf --requirepass 73748156 --appendonly yesDocker 部署 Nacos (单机)
shell
docker run -it --name nacos -p 8848:8848 -e MODE=standalone -v D:\EnvironmentFiles\DockerFile\nacos\conf:/home/nacos/conf -v D:\EnvironmentFiles\DockerFile\nacos\data:/home/nacos/conf/data -v D:\EnvironmentFiles\DockerFile\nacos\logs:/home/nacos/conf/logs -d nacos/nacos-server:1.1.3Docker 部署 Portainer
shell
docker run -d -p 9000:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v /data/portainer/data:/data --name portainer portainer/portainerFinish!
Yeah,that's all.
Docker 部署 jupyter notebook
shell
docker pull jupyter/base-notebookshell
docker run -d -p 8888:8888 --name jupyter_server jupyter/base-notebook:latestSo easy!
Docker 部署 v2raya
shell
docker run -d --restart=always -p 2017:2017 -p 20170-20172:20170-20172 --privileged --name v2raya -e V2RAYA_LOG_FILE=/data/v2raya/v2raya.log -v /lib/modules:/lib/modules -v /data/v2raya/v2raya:/etc/v2raya mzz2017/v2rayashell
docker run -d \
--restart=always \
--privileged \
--network=host \
--name v2raya \
-e V2RAYA_LOG_FILE=/tmp/v2raya.log \
-e V2RAYA_V2RAY_BIN=/usr/local/bin/v2ray \
-e V2RAYA_NFTABLES_SUPPORT=off \
-e IPTABLES_MODE=legacy \
-v /lib/modules:/lib/modules:ro \
-v /etc/resolv.conf:/etc/resolv.conf \
-v /etc/v2raya:/etc/v2raya \
mzz2017/v2rayaDocker 部署 Minio
shell
docker run -p 9000:9000 -p 9090:9090 \
--net=host \
--name minio \
-d --restart=always \
-e "MINIO_ACCESS_KEY=Gettler" \
-e "MINIO_SECRET_KEY=73748156" \
-v /data/minio/data:/data \
-v /data/minio/config:/root/.minio \
minio/minio server \
/data --console-address ":9090" -address ":9000"Docker 部署 NextCloud
shell
docker run -d --name nextcloud -p 8000:80 -v /data/nextcloud:/var/www/html nextcloudnextcloud 安装 外部存储插件
docker exec -it nextcloud bash
apt-get update
apt-get upgrade
apt install smbclient libsmbclient-dev
pecl install smbclient
docker-php-ext-enable smbclientDocker 搭建 headscale
version: '3'
services:
headscale:
image: headscale/headscale:latest
container_name: headscale
command: headscale serve
restart: unless-stopped
volumes:
- /opt/headscale/config:/etc/headscale/
- /opt/headscale/data:/var/lib/headscale/
ports:
- "17654:8080"
headscale-ui:
image: ghcr.io/gurucomputing/headscale-ui:latest
restart: unless-stopped
container_name: headscale-ui
ports:
- "15645:80"Docker 搭建 OpenProject
shell
docker run -d -p 80:8080 -p 5432:5432 --name openproject -e OPENPROJECT_HOST__NAME=192.168.30.116 -e SECRET_KEY_BASE=OUnKLrb7lrN6FU9CuSjWpDe2UjsfNSdr -v /var/lib/openproject/pgdata:/var/openproject/pgdata -e OPENPROJECT_HTTPS=false -v /var/lib/openproject/assets:/var/openproject/assets 192.144.231.250:3080/hub-proxy/openproject/openproject:17Docker 搭建 Jenkins
shell
docker run --name=jenkins --hostname=2540711260d3 --user=jenkins --group-add 988 --mac-address=f2:77:bc:71:c0:52 --volume /usr/bin/docker:/usr/bin/docker --volume /data/jenkins_home:/var/jenkins_home --volume /var/run/docker.sock:/var/run/docker.sock --env=TZ=Asia/Shanghai --network=bridge -p 50000:50000 -p 8080:8080 --restart=always --runtime=runc --detach=true 192.168.30.12/proxy/jenkins/jenkins:lts-jdk17