# 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 ```