一、docker安装1、快捷安装快捷安装参考:https://get.daocloud.io/#inst…curl -sSL https://get.daocloud.io/docker | sh2、手动安装1.)先查看内核,更新yum包docker要求CentOS系统的内核版本>3.10$ uname -r$ sudo yum update2.)安装依赖包$ sudo yum install -y yum-utils device-mapper-persistent-data lvm23.)设置国内docker镜像源$ sudo yum-config-manager –add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo4.)如果安装过,卸载旧版本$ sudo yum remove docker docker-common docker-selinux docker-engine5.)查看仓库中所有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 xxx2.)新建容器最少参数的创建# -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/sh3.)启动/停止容器$ docker start | restart xxx # 启动/重启$ docker stop xxx # 停止容器$ docker kill xxx # 强行终止,关闭进程4.)进入容器# 多窗口同时进入,会同步显示,容易窗口阻塞,适合本地开发$ docker attach xxx# 或者,docker在1.3.X版本,新命令$ docker exec -it xxx /bin/bash5.)删除容器/镜像# 删除容器前,先停止$ docker stop xxx $ docker rm xxx# 删除镜像$ docker rmi xxx # -f 强制删除6.)镜像改名$ docker tag 原镜像 新镜像 # 会生成一个新名,镜像id一样$ docker rmi 原镜像三、镜像构建1、手动构建镜像用基础镜像创建一个容器,手动安装好一切,然后用容器生成镜像:$ docker commit 容器名 新镜像名2、自动构建镜像:Dockerfile1.)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:latest2.)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-composechmod +x /usr/local/bin/docker-compose2、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/portainer2、相关问题1.) 可视化创建容器时,Advanced container settings -> Console 记得勾选 Interactive & TTY (-i -t),否则无法使用控制台2.) portainer中volume默认在/var/lib/docker/volumes下,貌似不能自定义目录,可通过手动命令行创建时-v指定