Docker知识点的系统化梳理

1. Docker简介1.1 Docker是什么 Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到其他机器上。容器可以简单地理解为是一个修改过的运行时环境,可以隔离所有的资源(除非明确允许)。UNIX中使用容器隔离资源已经有很长一段时间了,但是直接使用容器难度大,配置复杂,容易出错。Docker使用现有的容器技术,根据最佳实践提供一致的Docker构建方案,让大家可以很轻松的使用容器隔离资源,提供更强的安全性。目前,Docker可原生运行在Linux上,在OS X和Windows环境中通过单独的虚拟机也可以运行。 1.2 在隔离的容器中运行软件 Docker在linux上运行容器的结构如下图所示: 命令行工具或CLI在被称为用户空间的内存中运行,就像是在操作系统上运行的其他程序。运行Docker可以认为是在用户空间运行着两个程序:一个是Docker守护进程,另一个是DockerCLI,DockerCLI是与用户交互的Docker程序。上图也显示了三个运行着的容器,每个都是以Docker守护程序的子进程运行,封装在容器中。在容器中运行的程序只能访问该容器内部的内存空间和资源(除非特别规定可以访问容器外部资源)。 1.3 分发容器 Docker可以执行、复制和轻松的分发容器,Docker通过一种打包和分发的软件完成传统容器的封装,这个用来充当容器(Container)分发角色的组件被称为<font color=red>镜像(Image)</font>。镜像与容器的关系,个人认为类似类(Class)和实例的关系。基于一个类可以创建多个实例,每个实例都有独立的资源。而基于一个镜像可以创建多个容器,每个容器也互不干扰(如果不考虑容器连接等特殊情况) 2. Docker镜像2.1 Docker镜像简介 Docker镜像是一个存在于系统上的实体,镜像内部是一个精简的操作系统和应用运行所需要的文件以及所有依赖(镜像不包含内核,容器都是共享所在Docker主机的内核)。镜像仓库(Image Repository)是一个有名字的镜像桶,用于存放镜像,将镜像集中存放就是为了方便大家获取所需的镜像。镜像仓库又有一个镜像仓库服务(Image Registry)来管理,Docker客户端的镜像仓库服务是可配置的,默认是Docker Hub。在每个镜像仓库中,标签是唯一指定镜像的重要途径,也是一种创建有用别名的遍历方法。一个标签在一个仓库中只能被应用到单个镜像,但一个镜像可以有多个标签。下图展示了镜像仓库服务、镜像仓库、镜像之间的关系:镜像仓库服务管理多个镜像仓库,每个镜像仓库又可以包含多个镜像。 2.2 Docker镜像常见操作2.2.1 搜索拉取镜像 Docker镜像存储在镜像仓库中,可以从中搜索和拉去镜像。 如下为搜索镜像示例,其参数说明: NAME: 镜像仓库源的名称DESCRIPTION: 镜像的描述OFFICIAL: 是否 docker 官方发布STARS: 类似 Github 里面的 star,表示点赞、喜欢的意思。AUTOMATED: 自动构建。$ docker search ubuntuNAME DESCRIPTION STARS OFFICIAL AUTOMATEDubuntu Ubuntu is a Debian-based Linux operating sys… 10873 [OK] dorowu/ubuntu-desktop-lxde-vnc Docker image to provide HTML5 VNC interface … 422 [OK]rastasheep/ubuntu-sshd Dockerized SSH service, built on top of offi… 244 [OK]consol/ubuntu-xfce-vnc Ubuntu container with "headless" VNC session… 217 [OK]ubuntu-upstart Upstart is an event-based replacement for th… 108 [OK] ... 拉取镜像,可以指定标签拉取,不指定镜像标签默认拉取标签为 lastest 的镜像 ...

May 28, 2020 · 8 min · jiezi

docker构建sshnginxfpm镜像并通过supervisor实现开机自启动

写在前面 docker 容器编排可能更合适的是 Docker Compose 和 Kubernetes。日常开发,往往也不想要这么复杂,就丢一个容器里得了。 创建镜像 创建镜像有两种方式1.从已经创建的容器中更新镜像2.使用 Dockerfile 指令来创建一个新的镜像 这里我们选用第一种方式,并选用 centos7 官方镜像作为初始镜像。 拉取初始镜像(Centos7) docker pull centos:7启动容器 docker run -itd centos:7 /bin/bash-i 表示交互示操作-t 表示打开一个终端-d 后台运行centos:7 是我们镜像名称/bin/bash 指定一个交互窗口,启动容器一个要有一个窗口,否则容器会自动关闭进入容器 docker exec -it ab3d851192b2 /bin/bashab3d851192b2 是我们刚才启动的 CONTAINER ID开始安装软件 安装软件之前我们先更新一下系统 yum update -y安装一些常用的工具,下面用的着 yum -y install wget bzip2 gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel libxml2 libxml2-devel curl curl-devel安装 ssh (服务端和客户端) yum -y install passwd openssh-server openssh-clients修改配置文件 vi /etc/ssh/sshd_config找到 PermitRootLogin yes 把前面的注释符号 # 去掉,允许 root 用户登录,因为是日常开发用,就用root吧,可以省很多事 ...

May 27, 2020 · 2 min · jiezi

Docker-dockercompose安装

docker1.docker国内访问下载速度太慢, 借用第三方 DaoCloud 提供的docker安装源 curl -sSL https://get.daocloud.io/docker | sh 2.安装完成后, 使用 docker info 查看docker状态, 但是需要使用sudo权限, 因为docker命令属于docker用户组, 为了避免每次输入命令需要带sudo, 可将当前用户加入docker组 sudo gpasswd -a $(whoami) docker3.配置镜像加速 sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF'{ "registry-mirrors": ["https://**.mirror.aliyuncs.com"]}EOFsudo systemctl daemon-reloadsudo systemctl restart dockerdocker-compose1.docker-compose存放在github上, 安装速度不太理想, 还是借用 DaoCloud 提供的docker-compose安装源 curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-composechmod +x /usr/local/bin/docker-compose2.常用docker-compose .env:DCOMPOSE_DIR=/data/dcomposeMYSQL_ROOT_PASSWORD=123456docker-compose.yml:(自动加载同目录下的.env)version: "3"services: mysql: image: mysql:5.7 container_name: mysql restart: on-failure:3 environment: # 环境变量 - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} volumes: - "${DCOMPOSE_DIR}/mysql/data:/var/lib/mysql" - "${DCOMPOSE_DIR}/mysql/conf.d:/etc/mysql/conf.d" ports: - 3306:3306 tengine: image: axizdkr/tengine:2.3.2 container_name: tengine restart: on-failure:3 environment: - TZ=Asia/Shanghai - LANG=zh_CN.UTF-8 ports: - "80:80" - "443:443" volumes: - ${DCOMPOSE_DIR}/tengine/conf.d/:/etc/nginx/conf.d/ - ${DCOMPOSE_DIR}/tengine/log/:/var/log/nginx/

May 25, 2020 · 1 min · jiezi