一键安装Docker服务,Docker解决方案,Docker镜像源修改,CentOS7安装Docker,Ubuntu安装Docker
生产环境的Docker Root Dir主目录推荐使用其它文件夹且硬盘要最大否则docker日志容易占满磁盘空间文章目录CentOS7安装DockerUbuntu安装Docker修改Docker镜像源docker设置容器自动启动启动时加--restartalways如果已经过运行的项目docker compose设置容器自启动docker file修改时区docker在容器执行命令简单粗暴的办法安装curldocker compose命令安装docker composeDocker WEB 图形化Jenkins 无法执行 docker 命令docker 查看某个时间段的日志Docker运行命令对宿主机进行打包Docker的overlay2占用系统空间Docker生产环境数据迁移到其它硬盘1.完整停止 Docker 相关服务2. 创建新目录并全量迁移数据3. 修改 daemon.json 配置4. 重载配置并启动 Docker5. 验证修改结果6. 收尾与清理CentOS7安装Docker# step 1: 安装必要的一些系统工具sudoyuminstall-yyum-utils device-mapper-persistent-data lvm2# Step 2: 添加软件源信息sudoyum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# Step 3sudosed-isdownload.docker.commirrors.aliyun.com/docker-ce/etc/yum.repos.d/docker-ce.repo# Step 4: 更新并安装Docker-CEsudoyum clean packagessudoyum-yinstalldocker-ce# Step 4: 开启Docker服务sudosystemctlenable--nowdocker# 注意# 官方软件源默认启用了最新的软件您可以通过编辑软件源的方式获取各个版本的软件包。例如官方并没有将测试版本的软件源置为可用您可以通过以下方式开启。同理可以开启各种测试版本等。# vim /etc/yum.repos.d/docker-ce.repo# 将[docker-ce-test]下方的enabled0修改为enabled1## 安装指定版本的Docker-CE:# Step 1: 查找Docker-CE的版本:# yum list docker-ce.x86_64 --showduplicates | sort -r# Loading mirror speeds from cached hostfile# Loaded plugins: branch, fastestmirror, langpacks# docker-ce.x86_64 17.03.1.ce-1.el7.centos docker-ce-stable# docker-ce.x86_64 17.03.1.ce-1.el7.centos docker-ce-stable# docker-ce.x86_64 17.03.0.ce-1.el7.centos docker-ce-stable# Available Packages# Step2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.0.ce.1-1.el7.centos)# sudo yum -y install docker-ce-[VERSION]# 阿里云镜像有问题请使用下面镜像sudoyum clean allsudoyuminstall-yyum-utils device-mapper-persistent-data lvm2sudoyum-config-manager --add-repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.reposudosed-is|https://download.docker.com|https://mirrors.tuna.tsinghua.edu.cn/docker-ce|g/etc/yum.repos.d/docker-ce.reposudoyum clean packagessudoyuminstall-ydocker-cesudosystemctlenable--nowdockerUbuntu安装Docker# 安装依赖apt-getinstallca-certificatescurlgnupg lsb-release# 添加Docker官方GPG密钥curl-fsSLhttp://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg|sudoapt-keyadd-# 添加Docker的软件源sudoadd-apt-repositorydeb [archamd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu$(lsb_release-cs)stable# 安装Dockerapt-getinstalldocker-ce docker-ce-cli containerd.io-y# 开启Docker服务systemctlenable--nowdocker修改Docker镜像源sudotee/etc/docker/daemon.jsonEOF { registry-mirrors: [ https://docker.1ms.run, https://docker.xuanyuan.me ] } EOF# 重启docker服务systemctl daemon-reloadsystemctl restartdockerdocker设置容器自动启动启动时加–restartalwaysdockerrun-tid--nameisaler_v0.0.11-p8081:8080--restartalways-v/alidata/iDocker/run/projectImages/isaler/v0.0.11/log:/usr/local/tomcat/logs isaler_v0.0.11 Flag Description no 不自动重启容器.(默认value)on-failure 容器发生error而退出(容器退出状态不为0)重启容器 unless-stopped 在容器已经stop掉或Docker stoped/restarted的时候才重启容器 always 在容器已经stop掉或Docker stoped/restarted的时候才重启容器如果已经过运行的项目如果已经启动的项目则使用update更新dockerupdate--restartalways isaler_v0.0.11–restart参数--restart参数no 默认策略在容器退出时不重启容器 on-failure 在容器非正常退出时退出状态非0才会重启容器 on-failure:3 在容器非正常退出时重启容器最多重启3次 always 在容器退出时总是重启容器#开机自启unless-stopped 在容器退出时总是重启容器但是不考虑在Docker守护进程启动时就已经停止了的容器# 一般推荐使用always参数--restartalwaysdocker compose设置容器自启动docker-compose的配置文件是一个.yml格式的文件 第一部分 version:3#指定语法的版本第二部分 services:#定义服务nginx:#服务的名称-p参数后接服务名称container_name: web-nginx#容器的名称image: nginx:latest#镜像restart: always#设置开机自启ports:#端口映射-80:80 第三部分 volumes:#物理机与容器的磁盘映射关系- ./webserver:/webserver - ./nginx/nginx.conf:/etc/nginx/nginx.confdocker file修改时区CentosRUNrm-rf/etc/localtime RUNln-sf/usr/share/zoneinfo/Asia/Shanghai /etc/localtime RUNechoAsia/shanghai/etc/timezone RUNechoexport TZCST-8 /etc/profile RUNsource/etc/profileUbuntuENVTZAsia/Shanghai RUNecho${TZ}/etc/timezone\ln-sf/usr/share/zoneinfo/${TZ}/etc/localtime\aptupdate\aptinstall-ytzdata\rm-rf/var/lib/apt/lists/*DebianENVTZAsia/Shanghai参考链接https://juejin.cn/post/7082670118257295391docker在容器执行命令宿主机安装yuminstallutil-linux# 1、找到容器的pid docker inspect -f {{.State.Pid}} bb4cdc8cf836[roottxy201-51 ~]# docker inspect test-nsenter -f {{.State.Pid}}7327# 2、使用nsenter进入这个命名空间[roottxy201-51 ~]# nsenter -t 7327 -n简单粗暴的办法dockercp/usr/sbin/ss c91f37f68301:/usr/sbin/ss安装curldockerps|grepexcel-cell-data-import|awk{print $1}|head-1# 修改容器ID然后按顺序执行ContainerIDda1c1842d2d6dockercp/usr/bin/curl$ContainerID:/usr/bin/curl#docker cp /lib64/libcurl.so.4 $ContainerID:/usr/lib64/dockercp/lib64/libcurl.so.4$ContainerID:/lib64/dockercp/lib64/libc.so.6$ContainerID:/lib64/dockercp/usr/lib64$ContainerID:/exportLD_LIBRARY_PATH/usr/lib64/exportLD_LIBRARY_PATH/lib64/dockerexec-ti$ContainerID/bin/bashdocker compose命令安装docker composeDocker WEB 图形化使用portainer图形化dockerrun-d-p9000:9000--nameportainer--restartalways-v/var/run/docker.sock:/var/run/docker.sock portainer/portainer-ce持久化的数据目录为/data持久化的web 页面目录为/publicJenkins 无法执行 docker 命令# 把 Jenkins 加入 docker 组usermod-a-Gdockerjenkinsdocker 查看某个时间段的日志dockerlogs-t--since2022-05-16T15:13:05.999999999--until2022-05-16T17:00:05.999999999machexec_container-t显示时间戳--since显示自某个timestamp之后的日志--until显示自某个timestamp之前的日志Docker运行命令对宿主机进行打包PROJECT_PATH$(pwd)# 设置你的项目路径这里假设脚本与package.json在同一目录下NODE_VERSION18.20.6# 设置Node.js版本dockerpull node:$NODE_VERSION# 拉取指定版本的Node.js Docker镜像# 运行Docker容器并执行打包命令dockerrun--rm\-v$PROJECT_PATH:/usr/src/app\-w/usr/src/app\node:$NODE_VERSION\sh-cnpm i --registryhttp://registry.npmmirror.com npm run buildDocker的overlay2占用系统空间使用docker system prune命令删除当前系统所有临时镜像构建过程中产生的中间镜像使用docker system prune命令不会删除通过docker image ls或docker images命令查看到的所有镜像它只会移除悬空镜像dangling images。悬空镜像是那些未被打标签且不再被任何容器使用的镜像。如果一个镜像有名称和标签或者正在被某个容器使用那么它就不会被docker system prune删除。docker system prune不会删除明确列出有名称和标签且正在使用的镜像但docker system prune -a会删除任何未被使用的镜像无论它们是否有名称和标签。Docker生产环境数据迁移到其它硬盘1.完整停止 Docker 相关服务必须同时停止 socket 服务防止被自动唤醒导致数据损坏。sudosystemctl stopdockersudosystemctl stop docker.socketsudosystemctl stop containerd确认进程完全终止psaux|grep-idocker2. 创建新目录并全量迁移数据使用rsync同步数据可完整保留文件权限、属主、软链接和特殊属性支持断点续传。⚠️ 注意源目录末尾必须加/表示复制目录内的所有内容而非复制目录本身。# 示例新路径为 /data/dockersudomkdir-p/data/docker# 全量同步原有数据镜像、容器、数据卷、网络配置全部迁移sudorsync-avP/var/lib/docker/ /data/docker/同步完成后校验数据一致性du-sh/var/lib/docker /data/docker3. 修改 daemon.json 配置编辑 Docker 守护进程配置文件不存在则新建sudovi/etc/docker/daemon.json添加data-root配置项如果已有镜像加速、日志限制等配置用逗号分隔合并必须保证 JSON 格式合法{data-root:/data/docker}说明Docker 17.06 及以上版本统一使用data-root旧版本的graph参数已废弃不建议继续使用。4. 重载配置并启动 Dockersudosystemctl daemon-reloadsudosystemctl startdocker5. 验证修改结果确认根目录已生效dockerinfo|grepDocker Root Dir正常输出应为新路径例如Docker Root Dir: /data/docker验证业务数据完整性dockerps-a# 确认容器列表正常dockerimages# 确认镜像无丢失dockervolumels# 确认数据卷正常6. 收尾与清理验证所有业务运行正常后先将旧目录重命名备份观察 1-3 天无问题再彻底删除# 先备份保留sudomv/var/lib/docker /var/lib/docker.bak# 确认完全无问题后执行删除# sudo rm -rf /var/lib/docker.bak