342 lines
7.9 KiB
Markdown
342 lines
7.9 KiB
Markdown
# 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
|
||
```
|