乐趣区

Docker安装与应用

一、docker 安装
1、快捷安装
快捷安装参考:https://get.daocloud.io/#inst…

curl -sSL https://get.daocloud.io/docker | sh
2、手动安装
1.)先查看内核,更新 yum 包
docker 要求 CentOS 系统的内核版本 >3.10
$ uname -r
$ sudo yum update
2.)安装依赖包
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
3.)设置国内 docker 镜像源
$ sudo yum-config-manager –add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4.)如果安装过,卸载旧版本
$ sudo yum remove docker docker-common docker-selinux docker-engine
5.)查看仓库中所有 docker,安装
$ yum list docker-ce –showduplicates | sort -r
$ sudo yum install docker-ce
$ docker -v # 测试
3、启动 / 关闭 docker 服务 **
$ sudo systemctl start docker
$ sudo systemctl stop docker

# 加入随机启动
$ sudo systemctl enable docker
二、docker 常用命令
每次使用 docker 命令都需要 sudo,比较麻烦,可以通过以下命令添加当前用户到 docker 附属组:
$ sudo usermod -aG docker 当前用户名 # 需要注销后登录生效
1.)查看容器 / 镜像
$ docker ps # 查看本地容器
$ docker images # 查看本地镜像

# 查看容器详情
$ docker inspect xxx

# 查看容器 top 进程
$ docker top xxx

# 查找远程镜像
$ docker search xxx
2.)新建容器
最少参数的创建
# -d:表示后台运行,-it:表示以交互的方式创建,可视化时可通过 console 打开
$ docker run -d -it –name 容器名 –restart always 镜像名
更多参数:映射端口、dns、持久存储卷、初始化进程防容器退出
# -p:映射端口,–dns:有些容器默认 dns 解析服务配置不对(/etc/resolv.conf),-v:映射路径(可重复多个),/bin/sh:保持一个进程运行,否则容器会退出
$ docker run -dit -p 宿主端口: 容器端口 –dns=8.8.8.8 –name 容器名 -v 宿主路径: 容器路径 –restart always 镜像: 标签 /bin/sh
3.)启动 / 停止容器
$ docker start | restart xxx # 启动 / 重启

$ docker stop xxx # 停止容器
$ docker kill xxx # 强行终止,关闭进程
4.)进入容器
# 多窗口同时进入,会同步显示,容易窗口阻塞,适合本地开发
$ docker attach xxx

# 或者,docker 在 1.3.X 版本,新命令
$ docker exec -it xxx /bin/bash
5.)删除容器 / 镜像
# 删除容器前,先停止
$ docker stop xxx
$ docker rm xxx

# 删除镜像
$ docker rmi xxx # -f 强制删除
6.)镜像改名
$ docker tag 原镜像 新镜像 # 会生成一个新名,镜像 id 一样
$ docker rmi 原镜像
三、镜像构建
1、手动构建镜像
用基础镜像创建一个容器,手动安装好一切,然后用容器生成镜像:
$ docker commit 容器名 新镜像名
2、自动构建镜像:Dockerfile
1.)Dockerfile 配置
新建 Dockerfile 并配置相关内容,下面以配置一个基于 alpine 的 pm2 安装并运行 node 应用为例:
# 基础镜像源
FROM alpine

# 创建者信息
MAINTAINER hoby <w.hoby@qq.com>

# RUN 命令:构建过程中执行,常用于安装软件包
RUN echo ‘nameserver 8.8.8.8’ >> /etc/resolv.conf \
&& apk update \
&& apk add bash \
&& apk add nodejs && apk add npm \
&& npm config set registry https://registry.npm.taobao.org \
&& npm i -g pm2

# 指定工作目录,用绝对
WORKDIR /app

# 从宿主机 copy 到容器
#COPY ./www.js /app

# 与 COPY 类似,但 ADD 自带解压功能
#ADD ./x.tar.xz /app

# 定义环境变量
ENV NODE_ENV=production

# 配置 entrypoint 入口脚本
RUN echo ‘console.log(“this is node web!”)’ > ./www.js \
&& echo ‘#!/bin/bash’ > ./entrypoint.sh \
&& echo ‘pm2 start /app/www.js’ >> ./entrypoint.sh \
&& echo ‘/bin/sh’ >> ./entrypoint.sh \
&& chmod a+x ./entrypoint.sh

# 容器启动后执行的命令,且不可被 docker run 提供的参数覆盖
ENTRYPOINT [“/bin/sh”, “./entrypoint.sh”]

# 容器启动后默认执行的命令,可被 docker run 后面的参数代替
#CMD [“/bin/sh”]

# 暴露端口
EXPOSE 80
运行构建命令:
$ docker build -t myimage:latest . # 镜像名需小写
# 新建并启动容器
$ docker run -dit -p 8000:80 –dns=8.8.8.8 –name 容器名 –restart always myimage:latest
2.)Dockerfile 构建总结
a. 构建时下载不了软件包,说明容器 dns 不对,需修改 /etc/resolv.conf b. alpine 镜像默认 sh 终端,需安装 bash c. 建议一个容器只运行单个应用,多个应用见下文 compose 部署 d. Docker 镜像构建是分层,将多个 RUN 指令合并 e. - v 持久化路径时,若宿主机路径是新建的,容器路径内容会被清空 f. 当 ENTRYPOINT 与 CMD 使用 exec 参数时需双引号 g. 添加.dockerignore,提高编译速度:
.git/
node_modules/
四、多个应用容器部署
Docker Compose 是一个管理多容器应用的工具
1、docker-compose 安装
Compose 下载地址: https://get.daocloud.io/#inst…

curl -L https://get.daocloud.io/docker/compose/releases/download/1.24.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
2、docker-compose 文件配置
新建 docker-compose.yml,下面以 nginx 单容器配置为例:
version: “3”
services:
web:
image: nginx
volumes:
– ./nginx.conf:/etc/nginx/conf.d/actor.conf
– ./actor:/app/actor
container_name: actor
ports:
– “18000:8000”
command: [“nginx”,”-g”,”daemon off;”]

redis:
image: “redis:alpine”
在 docker-compose.yml 同目录下,创建启动 / 更新容器:
$ docker-compose up -d # - d 后台运行
3、docker-compose 常用命令
在 docker-compose.yml 同一目录下
# 创建并启动容器
$ docker-compose up -d

# 重启容器
$ docker-compose restart

# 查看 yml 配置
$ docker-compose config

# 停止容器
$ docker-compose stop

# 停止并移除容器
$ docker-compose down
五、可视化容器管理工具
Portainer 是一个轻量级的 Docker 环境 UI 界面管理系统
1、快速部署
$ docker volume create portainer_data # 在宿主机创建持久化目录
$ docker run -d -p 9000:9000 –name portainer –restart always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
2、相关问题
1.) 可视化创建容器时,Advanced container settings -> Console 记得勾选 Interactive & TTY (-i -t),否则无法使用控制台 2.) portainer 中 volume 默认在 /var/lib/docker/volumes 下,貌似不能自定义目录,可通过手动命令行创建时 - v 指定

退出移动版