article/centos 安装 docker.md
2023-03-19 23:23:43 +08:00

261 lines
5.7 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.

# Centos 安装 Docker
## 安装脚本
一键安装脚本Linux系统都支持
```bash
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
```
## 启动服务
```bash
# 启动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
```