This commit is contained in:
2022-08-28 09:57:48 +08:00
parent b7a0a5c104
commit 84be98ac74
20 changed files with 3211 additions and 0 deletions

263
centos 安装 docker.md Normal file
View File

@ -0,0 +1,263 @@
# Centos 安装 Docker
## 安装脚本
一键安装脚本Linux系统都支持
```
curl -sSL https://get.docker.com/ | sh
#国内阿里云镜像
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
#Azure源(中国区azure)
curl -fsSL https://get.docker.com | bash -s docker --mirror AzureChinaCloud
```
## 启动服务
```
# 启动docker服务
systemctl start docker.service
# 停止docker服务
systemctl stop docker.service
# 重启docker服务
systemctl restart docker.service
# 查看docker服务当前状态
systemctl status docker.service
# 设置 docker 服务开机自启动
systemctl enable docker.service
# 停止 docker 服务开机自启动
systemctl disable docker.service
```
## 国内镜像
为了加速下载镜像文件,国内服务器可以指定国内的镜像!
阿里云https://registry.cn-hangzhou.aliyuncs.com/
华为云https://05f073ad3c0010ea0f4bc00b7105ec20.mirror.swr.myhuaweicloud.com/
Docker中国https://registry.docker-cn.com
网易http://hub-mirror.c.163.com
中科大https://docker.mirrors.ustc.edu.cn
腾讯云 https://mirror.ccs.tencentyun.com
### 写入配置文件 重启服务
```
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://mirror.ccs.tencentyun.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
```
## 迁移目录
主要是为了不让Docker镜像容器占用系统盘的容量
如果就一块盘或者系统盘容量大,这部分内容可忽略!
```
# 给Docker廋身一下
#docker system prune
#停止Docker服务
systemctl stop docker
#创建目标目录
mkdir -p /data/docker/
#同步源目录文件 -> 目标目录
rsync -avz /var/lib/docker/ /data/docker
#修改Docker配置文件
vim /etc/docker/daemon.json
#修改或者新增内容如下
{
"data-root": "/data/docker"
}
#启动Docker服务
systemctl start docker
# 查看是否修改成功
docker info | grep "Docker Root Dir"
#输出Docker Root Dir: /data/docker 就OK了
```
## 常用命令
```
#下载镜像
docker pull nginx
#启动容器
#下面命令为启动一个nginx将服务器的8080 端口 映射到 容器的80端口且容器命名为nginx-test
docker run -d -p 8080:80 nginx --name="nginx-test"
#停止容器
docker stop xxxx
删除容器
docker rm id
-f, --force=false 是否强行终止并删除一个运行中的容器
-l, --link=false :删除容器的连接 ,但保留容器
-v, --volumes=false :删除容器挂载的数据卷
删除所有镜像
docker rmi $(docker images -q)
#停止所有容器
docker stop $(docker ps -a -q)
#删除所有容器
docker rm $(docker ps -a -q)
#启动所有容器
docker start $(docker ps -a -q)
#进入容器
docker exec -it jd /bin/bash
docker exec -it jd /bin/sh
docker exec -it jd /bash
docker exec -it jd /sh
#宿主往容器中复制文件
docker cp /etc/apt/sources.list ubuntu:/etc/apt/
#容器中往宿主机复制
docker cp testtomcat/usr/local/tomcat/webapps/test/js/test.js /opt
#不进入容器 在容器中执行命令
docker exec ID 命令
#查看容器信息
docker inspect ID
#查询部分信息
docker inspect -f {{.Config.Hostname}} id
```
## 开发调试
### Build Dockerfile
```
#比如我们要写一个Dockerfile 该怎么调试呢?
docker build -t [命名] [编译的目录]
#比如AList目录中有Dockerfile重新编译镜像且命名成alist
docker build -t alist ./AList/
#启动 alist
docker run alist --name="alist"
```
## 容器目录映射
以docker hub的centos:8为研究对象
**1、宿主机和容器映射目录都不存在**
宿主机和容器映射目录都会自动创建,且在一边操作等同于在另一边操作。
**2、宿主机目录不存在容器映射目录为空。容器中/usr/lib/games目录为空**
宿主机映射目录会自动创建,且在一边操作等同于在另一边操作。
**3、宿主机目录不存在容器映射目录不为空。容器中/usr/lib/locale/C.utf8目录不为空**
宿主机映射目录会自动创建,容器映射目录中原来的文件都消失了,在一边操作等同于在另一边操作,且操作的是宿主机目录中的文件。
**4、宿主机映射目录为空容器映射目录不存在**
容器映射目录会自动创建,且在一边操作等同于在另一边操作。
**5、宿主机和容器映射目录都为空。**
在一边操作等同于在另一边操作。
**6、宿主机映射目录为空容器映射目录不为空**
容器映射目录中原来的文件都消失了。在一边操作等同于在另一边操作,且操作的是宿主机目录中的文件。
**7、宿主机映射目录不为空容器映射目录不存在**
容器映射目录会自动创建,一进去该目录就能看见宿主机映射目录中的文件,且在一边操作等同于在另一边操作。
**8、宿主机映射目录不为空容器映射目录为空**
一进容器映射目录就能看见宿主机映射目录中的文件,且在一边操作等同于在另一边操作。
**9、宿主机和容器映射目录都不为空。**
容器映射目录中原来的文件都消失了。在一边操作等同于在另一边操作,且操作的是宿主机目录中的文件。
## 常见问题
容器内没有网 不能解析dns
创建时添加以下参数
```
--network=host
```