docker

DockerHub 加速镜像部署 - 使用cloudflare 代理
DockerHub 加速镜像部署 - 使用cloudflare 代理
背景 6 月 6 日,上海交大的 Docker Hub 镜像加速器宣布因收到通知要求被下架。声明称:“即时起我们将中止对 dockerhub 仓库的镜像。docker 相关工具默认会自动处理失效镜像的回退,如果对官方源有访问困难问题,建议尝试使用其他仍在服务的镜像源。我们对给您带来的不便表示歉意,感谢您的理解与支持。”Docker Hub 是目前最大的容器镜像社区,去年 5 月起国内用户报告 Docker Hub 官网无法访问,其网址解析返回了错误 IP 地址。 因为不能直接访问国外的镜像仓库,下载国外的docker镜像速度一直很慢, 国内从 Docker Hub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。 使用 我这边已经部署好了加速镜像节点,同学们如果不想自己部署,可以使用我的加速节点,但是,不能保证节点长期有效。 1https://dockerhub.jobcher.com 第一步:代理拉取镜像 假如我们下载node镜像,那么我们可以这样写: 1docker pull dockerhub.jobcher.com/library/node:latest 2# 或者 3docker pull dockerhub.jobcher.com/bitnami/node:latest 第二步:重命名镜像 1docker tag dockerhub.jobcher.com/library/node:latest node:latest 2# 或者 3docker tag dockerhub.jobcher.com/bitnami/node:latest node:latest 第三步:删除代理镜像 1docker rmi dockerhub.jobcher.com/library/node:latest 2# 或者 3docker rmi dockerhub.jobcher.com/bitnami/node:latest 或者直接配置到镜像仓库 1sudo mkdir -p /etc/docker 2sudo tee /etc/docker/daemon.json <<-'EOF' 3{ 4 "registry-mirrors": [ 5 "https://dockerhub.
docker的零停机部署
docker的零停机部署
背景 使用 docker compose up 部署新版本的服务会导致停机,因为应用容器在创建新容器之前已停止。如果你的应用程序需要一段时间才能启动,用户可能会注意到这一点。为了保障服务用户无感,可以使用docker rollout 适合没必要用 K8S 轻量级小项目 安装 项目地址 1# 为 Docker cli 插件创建目录 2mkdir -p ~/.docker/cli-plugins 3 4# 下载 docker-rollout 脚本到 Docker cli 插件目录 5curl https://github.jobcher.com/gh/https://raw.githubusercontent.com/wowu/docker-rollout/master/docker-rollout -o ~/.docker/cli-plugins/docker-rollout 6 7# 使脚本可执行 8chmod +x ~/.docker/cli-plugins/docker-rollout 使用 注意事项!!! 服务不能在 docker-compose.yml 中定义 container_name 和 ports ,因为不可能运行具有相同名称或端口映射的多个容器。 需要像 Traefik 或 nginx-proxy 这样的代理来路由流量。 每次部署都会增加容器名称中的索引(例如 project-web-1 -> project-web-2 ) 使用示范 1# 下载代码 2git pull 3# 构建新的应用程序映像 4docker compose build web 5# 运行数据库迁移 6docker compose run web rake db:migrate 7# 部署新版本 8docker rollout web 或者使用docker-compose.
清理Docker容器日志
清理Docker容器日志
清理 Docker 容器日志 如果 docker 容器正在运行,那么使用rm -rf方式删除日志后,通过df -h会发现磁盘空间并没有释放。原因是在 Linux 或者 Unix 系统中,通过rm -rf或者文件管理器删除文件,将会从文件系统的目录结构上解除链接(unlink)。如果文件是被打开的(有一个进程正在使用),那么进程将仍然可以读取该文件,磁盘空间也一直被占用。正确姿势是cat /dev/null > *-json.log,当然你也可以通过rm -rf删除后重启 docker。 日志清理脚本 clean_docker_log.sh 1#!/bin/sh 2 3echo "======== start clean docker containers logs ========" 4 5logs=$(find /var/lib/docker/containers/ -name *-json.log) 6 7for log in $logs 8 do 9 echo "clean logs : $log" 10 cat /dev/null > $log 11 done 12 13echo "======== end clean docker containers logs ========" chmod +x clean_docker_log.sh && ./clean_docker_log.sh 设置 Docker 容器日志大小 设置一个容器服务的日志大小上限
contained 安装及使用
contained 安装及使用
contained 安装及使用 containerd 是一个行业标准的容器运行时,强调简单性、健壮性和可移植性。它可作为 Linux 和 Windows 的守护进程使用,可以管理其主机系统的完整容器生命周期:图像传输和存储、容器执行和监督、低级存储和网络附件等。 containerd is a member of CNCF with graduated status. 早在 2016 年 3 月,Docker 1.11的Docker Engine里就包含了containerd,而现在则是把containerd从Docker Engine里彻底剥离出来,作为一个独立的开源项目独立发展,目标是提供一个更加开放、稳定的容器运行基础设施。和原先包含在 Docker Engine 里containerd相比,独立的containerd将具有更多的功能,可以涵盖整个容器运行时管理的所有需求。 containerd并不是直接面向最终用户的,而是主要用于集成到更上层的系统里,比如Swarm, Kubernetes, Mesos等容器编排系统。 containerd以Daemon的形式运行在系统上,通过暴露底层的gRPC API,上层系统可以通过这些API管理机器上的容器。 每个containerd只负责一台机器,Pull 镜像,对容器的操作(启动、停止等),网络,存储都是由 containerd 完成。具体运行容器由runC负责,实际上只要是符合OCI规范的容器都可以支持。 对于容器编排服务来说,运行时只需要使用containerd+runC,更加轻量,容易管理。 5.独立之后containerd的特性演进可以和Docker Engine分开,专注容器运行时管理,可以更稳定。 安装 centos 1yum install -y containerd.io ubuntu 1apt install -y containerd.io 设置开机自启 1systemctl enable containerd 2systemctl start containerd 3systemctl status containerd 验证 1ctr version ctr 命令 命令 作用 plugins, plugin 提供有关容器插件的信息 version 打印客户端和服务器版本 containers, c, container 管理容器 content 管理内容 events, event 显示容器事件 images, image, i 管理图像 leases 管理租约 namespaces, namespace, ns 管理租命名空间 pprof 为 containerd 提供 golang pprof 输出 run 运行一个容器 snapshots, snapshot 管理快照 tasks, t, task 管理任务 install 安装一个新包 oci OCI 工具 shim 直接与 shim 交互 help, h 显示命令列表或一个命令的帮助
JOBCHER BLOG
docker 命令(2)
docker 命令(2) docker ps 命令 docker ps 能查看所有运行中的容器 docker ps -a 能查看所有的容器 docker rm -f $(docker ps -aq) 强制删除所有容器 docker run和docker create有什么区别 docker create命令能够基于镜像创建容器。 该命令执行的效果类似于docker run -d,即创建一个将在系统后台运行的容器。 但是与docker run -d不同的是,docker create创建的容器并未实际启动,还需要执行docker start命令或docker run命令以启动容器。 事实上,docker create 命令常用于在启动容器之前进行必要的设置。
清理Docker的container,image与volume
清理Docker的container,image与volume
清理 Docker 的 container,image 与 volume Docker 的镜像(image)、容器(container)、数据卷(volume), 都是由 daemon 托管的。 因此,在需要清理时,也需要使用其自带的手段。 清理技巧 清理所有停止运行的容器: 1docker container prune 2# or 3docker rm $(docker ps -aq) 清理所有悬挂(<none>)镜像: 1docker image prune 2# or 3docker rmi $(docker images -qf "dangling=true") 清理所有无用数据卷: 1docker volume prune 由于prune操作是批量删除类的危险操作,所以会有一次确认。 如果不想输入y<CR>来确认,可以添加-f操作。慎用! 清理停止的容器 docker rm -lv CONTAINER -l是清理 link,v是清理 volume。 这里的 CONTAINER 是容器的 name 或 ID,可以是一个或多个。 参数列表: Name shorthand Default Description –force,-f false Force the removal of a running container (uses SIGKILL) –link, -l false Remove the specified link –volumes, -v false Remove the volumes associated with the container 清理所有停止的容器 通过docker ps可以查询当前运行的容器信息。 而通过docker ps -a,可以查询所有的容器信息,包括已停止的。
JOBCHER BLOG
docker 和 docker-compose 安装
安装 docker 通过 docker 脚本安装 1curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun 1curl -sSL https://get.daocloud.io/docker | sh CentOS 手动安装 卸载之前相关的依赖 1sudo yum remove docker \ 2 docker-client \ 3 docker-client-latest \ 4 docker-common \ 5 docker-latest \ 6 docker-latest-logrotate \ 7 docker-logrotate \ 8 docker-engine 下载依赖包 1sudo yum install -y yum-utils 选择国内阿里云镜像 1sudo yum-config-manager \ 2 --add-repo \ 3 https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 安装 Docker Engine-Community 1sudo yum install docker-ce docker-ce-cli containerd.
JOBCHER BLOG
docker 安装kong 网关
docker 安装 kong 网关 建立数据库 创建网络 1docker network create kong-net 建立数据库 1docker run -d --name kong-database \ 2 --network=kong-net \ 3 -p 5432:5432 \ 4 -e "POSTGRES_USER=kong" \ 5 -e "POSTGRES_DB=kong" \ 6 -e "POSTGRES_PASSWORD=kong123" \ 7 postgres:9.6 创建 kong 数据 1docker run --rm --network=kong-net \ 2 -e "KONG_DATABASE=postgres" \ 3 -e "KONG_PG_HOST=kong-database" \ 4 -e "KONG_PG_PASSWORD=kong123" \ 5 -e "KONG_PASSWORD=kong123" \ 6 kong:latest kong migrations bootstrap 创建 kong 创建 kong gateway 1 docker run -d --name kong \ 2 --network=kong-net \ 3 -e "KONG_DATABASE=postgres" \ 4 -e "KONG_PG_HOST=kong-database" \ 5 -e "KONG_PG_USER=kong" \ 6 -e "KONG_PG_PASSWORD=kong123" \ 7 -e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \ 8 -e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \ 9 -e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \ 10 -e "KONG_PROXY_ERROR_LOG=/dev/stderr" \ 11 -e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \ 12 -e "KONG_ADMIN_LISTEN=0.
JOBCHER BLOG
搭建docker registry 镜像仓库
搭建 docker registry 镜像仓库 获取镜像 1docker pull registry:2.7.1 1docker pull hyper/docker-registry-web 容器运行 1mkdir -p /opt/data/registry 2docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry --name registry registry:2.7.1 1docker run -d -p 8080:8080 --name registry-web --link registry \ 2 -e REGISTRY_URL=http://192.168.99.146:5000/v2 \ 3 -e REGISTRY_TRUST_ANY_SSL=true \ 4 -e REGISTRY_BASIC_AUTH="GjhYGDGi2HhkJB" \ 5 -e REGISTRY_NAME=192.168.99.146:5000 \ 6 hyper/docker-registry-web 上传容器 1vim /etc/docker/daemon.json 2{ 3 "insecure-registries": ["192.168.99.146:5000"] 4} 5 6docker tag sjtfreaks/hogo-nginx:v1.1 192.168.99.146:5000/sjtfreaks/hogo-nginx:v1.1 7docker push 192.168.99.146:5000/sjtfreaks/hogo-nginx:v1.1
JOBCHER BLOG
docker image镜像上传
docker image 镜像上传 登入 docker hub,在https://hub.docker.com上注册你的账号。 1docker login 2username:#输入你的用户名 3password:#输入你的密码 上传镜像 1docker tag nginx:hugo sjtfreaks/hogo-nginx:v1 2docker push sjtfreaks/hogo-nginx:v1
JOBCHER BLOG
docker进阶使用
docker 进阶使用 dockerfile 和 docker compose 的配置 Dockerfile 使用 Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。 例子: 1 FROM nginx 2 RUN echo '这是一个本地构建的nginx镜像' > /usr/share/nginx/html/index.html 保存 Dockerfile 文件并在本地路径执行 1 docker build -t nginx:v1-test . 2 docker run -name docker run --name nginx-test -d -p 8080:80 nginx:v1-test 浏览 nginx 页面确认更新内容 curl 127.0.0.1:8080 输出: 这是一个本地构建的nginx镜像 Docker 命令详解 COPY 复制指令,从上下文目录中复制文件或者目录到容器里指定路径。 1 COPY [--chown=<user>:<group>] <源路径1>... <目标路径> 2 COPY [--chown=<user>:<group>] ["<源路径1>",... "<目标路径>"] <源路径>:源文件或者源目录,这里可以是通配符表达式,其通配符规则要满足 Go 的 filepath.Match 规则。例如: 1 COPY hom* /mydir/ 2 COPY hom?