article/centos 安装 docker.md
2024-02-02 15:46:50 +08:00

342 lines
7.9 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 安装 Docker
## 安装脚本
一键安装脚本Linux系统都支持
```bash
curl -sSL https://get.docker.com/ | sh
```
## oracle linxu
1. 执行以下命令以安装Docker依赖项
```
sudo yum -y install yum-utils device-mapper-persistent-data lvm2
```
2. 执行以下命令以添加Docker官方GPG key
```
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
```
3. 执行以下命令以安装Docker CE
```
sudo yum install docker-ce
```
4. 启动并设置Docker服务为开机自启
```
sudo systemctl start docker
sudo systemctl enable docker
```
通过`docker --version`命令您可以检查Docker是否已经安装。如果命令输出了版本信息说明已经成功安装Docker CE。
希望这次能给您提供一个更简洁的方法。
## 启动服务
```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
### 写入配置文件 重启服务
```bash
sudo mkdir -p /etc/docker
#注意EOF前不能有空格
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://mirror.ccs.tencentyun.com"]
}
EOF
```
```
sudo systemctl daemon-reload
sudo systemctl restart docker
```
## docker 配置代理
```
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo touch /etc/systemd/system/docker.service.d/proxy.conf
```
```
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:8080/"
Environment="HTTPS_PROXY=http://proxy.example.com:8080/"
Environment="NO_PROXY=localhost,127.0.0.1,.example.com"
```
重启 服务
```
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
```
```bash
#构建建启动nignx容器
docker-compose up -d nginx
#登录到nginx容器中
docker-compose exec nginx bash
#删除所有nginx容器,镜像
docker-compose down
#显示所有容器
docker-compose ps
#重新启动nginx容器
docker-compose restart nginx
#在php-fpm中不启动关联容器并容器执行php -v 执行完成后删除容器
docker-compose run --no-deps --rm php-fpm php -v
#构建镜像 。
docker-compose build nginx
#不带缓存的构建。
docker-compose build --no-cache nginx
#查看nginx的日志
docker-compose logs nginx
# 查看nginx的实时日志
docker-compose logs -f nginx
#验证docker-compose.yml文件配置当配置正确时不输出任何内容当文件配置错误输出错误信息。
docker-compose config -q
#以json的形式输出nginx的docker日志
docker-compose events --json nginx
#暂停nignx容器
docker-compose pause nginx
#恢复ningx容器
docker-compose unpause nginx
#删除容器(删除前必须关闭容器)
docker-compose rm nginx
#停止nignx容器
docker-compose stop nginx
# 启动nignx容器
docker-compose start nginx
```
## 开发调试
### 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
```