资讯专栏INFORMATION COLUMN

Docker安装与应用

leejan97 / 1269人阅读

摘要:一安装快捷安装快捷安装参考手动安装先查看内核,更新包要求系统的内核版本安装依赖包设置国内镜像源如果安装过,卸载旧版本查看仓库中所有,安装测试启动关闭服务加入随机启动二常用命令每次使用命令都需要,

一、docker安装 1、快捷安装

</>复制代码

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

</>复制代码

  1. curl -sSL https://get.daocloud.io/docker | sh
2、手动安装

1.)先查看内核,更新yum包

</>复制代码

  1. docker要求CentOS系统的内核版本>3.10

</>复制代码

  1. $ uname -r
  2. $ sudo yum update

2.)安装依赖包

</>复制代码

  1. $ sudo yum install -y yum-utils device-mapper-persistent-data lvm2

3.)设置国内docker镜像源

</>复制代码

  1. $ sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

4.)如果安装过,卸载旧版本

</>复制代码

  1. $ sudo yum remove docker docker-common docker-selinux docker-engine

5.)查看仓库中所有docker,安装

</>复制代码

  1. $ yum list docker-ce --showduplicates | sort -r
  2. $ sudo yum install docker-ce
  3. $ docker -v # 测试
3、启动/关闭docker服务**

</>复制代码

  1. $ sudo systemctl start docker
  2. $ sudo systemctl stop docker
  3. # 加入随机启动
  4. $ sudo systemctl enable docker
二、docker常用命令

</>复制代码

  1. 每次使用docker命令都需要sudo,比较麻烦,可以通过以下命令添加当前用户到docker附属组:

</>复制代码

  1. $ sudo usermod -aG docker 当前用户名 # 需要注销后登录生效

1.)查看容器/镜像

</>复制代码

  1. $ docker ps # 查看本地容器
  2. $ docker images # 查看本地镜像
  3. # 查看容器详情
  4. $ docker inspect xxx
  5. # 查看容器top进程
  6. $ docker top xxx

2.)下载镜像

</>复制代码

  1. 创建容器前,可先下好远程镜像,也可以在创建时再下载

</>复制代码

  1. # 先查找远程镜像
  2. $ docker search xxx
  3. $ docker pull xxx

3.)新建容器

</>复制代码

  1. 最少参数的创建

</>复制代码

  1. # -d:表示后台运行,-it:表示以交互的方式创建,可视化时可通过console打开
  2. $ docker run -d -it --name 容器名 --restart always 镜像名

</>复制代码

  1. 更多参数:映射端口、dns、持久存储卷、初始化进程防容器退出

</>复制代码

  1. # -p:映射端口,--dns:有些容器默认dns解析服务配置不对(/etc/resolv.conf),-v:映射路径(可重复多个),/bin/sh:保持一个进程运行,否则容器会退出
  2. $ docker run -dit -p 宿主端口:容器端口 --dns=8.8.8.8 --name 容器名 -v 宿主路径:容器路径 --restart always 镜像:标签 /bin/sh

docker中安装centos无法使用systemctl命令管理进程,报以下错误:
Failed to get D-Bus connection: Operation not permitted

</>复制代码

  1. 原因:需要特权才能启动systemd进程,解决方案:

</>复制代码

  1. docker run -dit --privileged 其它参数 init

4.)启动/停止容器

</>复制代码

  1. $ docker start | restart xxx # 启动/重启
  2. $ docker stop xxx # 停止容器
  3. $ docker kill xxx # 强行终止,关闭进程

5.)进入容器

</>复制代码

  1. # 多窗口同时进入,会同步显示,容易窗口阻塞,适合本地开发
  2. $ docker attach xxx
  3. # 或者,docker在1.3.X版本,新命令
  4. $ docker exec -it xxx /bin/bash

6.)删除容器/镜像

</>复制代码

  1. # 删除容器前,先停止
  2. $ docker stop xxx
  3. $ docker rm xxx
  4. # 删除镜像
  5. $ docker rmi xxx # -f 强制删除

7.)容器/镜像改名

</>复制代码

  1. # 容器改名
  2. $ docker rename 原容器名 新容器名
  3. # 镜像改名
  4. $ docker tag 原镜像 新镜像 # 会生成一个新名,镜像id一样
  5. $ docker rmi 原镜像
三、镜像构建 1、手动构建镜像

</>复制代码

  1. 用基础镜像创建一个容器,手动安装好一切,然后用容器生成镜像:

</>复制代码

  1. $ docker commit 容器名 新镜像名
2、自动构建镜像:Dockerfile

1.)Dockerfile配置

</>复制代码

  1. 新建Dockerfile并配置相关内容,下面以配置一个基于alpine的pm2安装并运行node应用为例:

</>复制代码

  1. # 基础镜像源
  2. FROM alpine
  3. # 创建者信息
  4. MAINTAINER hoby
  5. #修复时区
  6. RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
  7. && echo "Asia/Shanghai" > /etc/timezone
  8. # RUN命令:构建过程中执行,常用于安装软件包
  9. RUN echo "nameserver 8.8.8.8" >> /etc/resolv.conf
  10. && apk update
  11. && apk add bash
  12. && apk add nodejs && apk add npm
  13. && npm config set registry https://registry.npm.taobao.org
  14. && npm i -g pm2
  15. # 指定工作目录,用绝对
  16. WORKDIR /app
  17. # 从宿主机copy到容器
  18. #COPY ./www.js /app
  19. # 与COPY类似,但ADD自带解压功能
  20. #ADD ./x.tar.xz /app
  21. # 定义环境变量
  22. ENV NODE_ENV=production
  23. # 配置entrypoint入口脚本
  24. RUN echo "console.log("this is node web!")" > ./www.js
  25. && echo "#!/bin/bash" > ./entrypoint.sh
  26. && echo "pm2 start /app/www.js" >> ./entrypoint.sh
  27. && echo "/bin/sh" >> ./entrypoint.sh
  28. && chmod a+x ./entrypoint.sh
  29. # 容器启动后执行的命令,且不可被docker run提供的参数覆盖
  30. ENTRYPOINT ["/bin/sh", "./entrypoint.sh"]
  31. # 容器启动后默认执行的命令,可被docker run后面的参数代替
  32. #CMD ["/bin/sh"]
  33. # 暴露端口
  34. EXPOSE 80

</>复制代码

  1. 运行构建命令:

</>复制代码

  1. $ docker build -t myimage:latest . # 镜像名需小写
  2. # 新建并启动容器
  3. $ docker run -dit -p 8000:80 --dns=8.8.8.8 --name 容器名 --restart always myimage:latest

2.)Dockerfile构建总结

</>复制代码

  1. a. 构建时下载不了软件包,说明容器dns不对,需修改/etc/resolv.conf
    b. alpine镜像默认sh终端,需安装bash
    c. 建议一个容器只运行单个应用,多个应用见下文compose部署
    d. Docker镜像构建是分层,将多个RUN指令合并
    e. -v持久化路径时,若宿主机路径是新建的,容器路径内容会被清空
    f. 当ENTRYPOINT与CMD使用exec参数时需双引号
    g. 添加.dockerignore,提高编译速度:

</>复制代码

  1. .git/
  2. node_modules/
四、多个应用容器部署

</>复制代码

  1. Docker Compose是一个管理多容器应用的工具
1、docker-compose安装

</>复制代码

  1. Compose下载地址: https://get.daocloud.io/#inst...

</>复制代码

  1. curl -L https://get.daocloud.io/docker/compose/releases/download/1.24.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
  2. chmod +x /usr/local/bin/docker-compose
2、docker-compose文件配置

</>复制代码

  1. 新建docker-compose.yml,下面以nginx+node+mongo+redis联合容器配置为例:

</>复制代码

  1. version: "3"
  2. services:
  3. web:
  4. image: nginx
  5. container_name: encore-web
  6. restart: always
  7. ports:
  8. - 18001:8001
  9. volumes:
  10. - ./bin/nginx.conf:/etc/nginx/conf.d/encore.conf
  11. - ./web/dist:/app/encore/web
  12. command: ["nginx", "-g", "daemon off;"]
  13. links:
  14. - server
  15. server:
  16. image: keymetrics/pm2
  17. container_name: encore-server
  18. restart: always
  19. ports:
  20. - 18100:8100
  21. volumes:
  22. - ./server:/app/encore/server
  23. working_dir: /app/encore/server
  24. environment:
  25. - MONGO_SERVER=mongo
  26. - MONGO_PORT=27017
  27. - REDIS_SERVER=redis
  28. - REDIS_PORT=6379
  29. command: npm start
  30. links:
  31. - mongo
  32. - redis
  33. mongo:
  34. image: mongo
  35. container_name: encore-mongo
  36. restart: always
  37. ports:
  38. - 18017:27017
  39. volumes:
  40. - ./mongo/configdb:/data/configdb
  41. - ./mongo/db:/data/db
  42. command: mongod --auth
  43. redis:
  44. image: redis
  45. container_name: encore-redis
  46. restart: always
  47. ports:
  48. - 18379:6379
  49. volumes:
  50. - ./redis/data:/data
  51. - ./bin/redis.conf:/usr/local/etc/redis.conf
  52. command: redis-server /usr/local/etc/redis.conf

</>复制代码

  1. 需要注意的:
    a.) command支持exec和shell两种模式(见上面的web和server)
    b.) nginx、pm2等进程需加--no-daemon参数使其在前台运行,以保证容器不退出
    c.) npm start需要设置工作目录
    d.) links后,在容器可直接把服务名做为一个hostname访问,如下:

</>复制代码

  1. # nginx反向代理
  2. proxy_pass http://server:8100/;
  3. # mongo连接
  4. mongodb://mongo:27017/encore
  5. # node容器可先设置环境变量,再动态获取
  6. "mongodb://www:123456@" + process.env.MONGO_SERVER + ":" + process.env.MONGO_PORT + "/encore"

在docker-compose.yml同目录下,创建启动/更新容器:

</>复制代码

  1. $ docker-compose up -d # -d后台运行
3、docker-compose常用命令

</>复制代码

  1. docker-compose.yml同一目录下

</>复制代码

  1. # 创建并启动容器
  2. $ docker-compose up -d
  3. # 重启容器
  4. $ docker-compose restart
  5. # 查看yml配置
  6. $ docker-compose config
  7. # 停止容器
  8. $ docker-compose stop
  9. # 停止并移除容器
  10. $ docker-compose down
五、可视化容器管理工具

</>复制代码

  1. Portainer是一个轻量级的Docker环境UI界面管理系统
1、快速部署

</>复制代码

  1. $ docker volume create portainer_data # 在宿主机创建持久化目录
  2. $ 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.)交互模式

</>复制代码

  1. 创建容器时,在高级设置里,Console项记得勾选交互模式,否则无法使用控制台

[x] Interactive & TTY (-i -t)

2.)入口命令

</>复制代码

  1. 在容器高级设置里,command里的shell命令必须单个加引号,如:

</>复制代码

  1. Command: "pm2" "start" "./www.js" "--no-daemon"
  2. Working Dir: /app

3.)volume添加

</>复制代码

  1. portainer中volume默认在/var/lib/docker/volumes下,通过点击bind按钮修改/自定义对应的host路径

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/40592.html

相关文章

  • Docker容器系列教程(一):简介安装

    摘要:容器镜像运行后,此时就实例化了一个容器。侧重的是应用级别,而虚拟机是彻底隔离整个运行环境。方便交付将应用以及运行环境打包成一个镜像,交付更简单高效。下载地址点击运行即可一如既往的下一步下一步完成安装。 Docker是什么 Docker是一款由DotCloud公司(现改名为Docker)基于Go语言开发的开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发...

    BlackHole1 评论0 收藏0
  • Docker 入门及安装[Docker 系列-1]

    摘要:核心对名字空间的支持完全隔离了工作环境中应用程序的视野,包括进程树网络用户与挂载文件系统,而核心的提供资源隔离,包括存储器与网络。因此更为轻量快速和易于管理。 docker 如日中天,这不是单纯的炒概念,docker 确确实实解决了开发与运维的痛点,因此在企业开发中得到了非常广泛的使用,本文对于 docker 的这些基本知识点再做一些简单回顾。 什么是 docker 根据 wikip...

    Lin_R 评论0 收藏0
  • Docker安装应用

    摘要:一安装快捷安装快捷安装参考手动安装先查看内核,更新包要求系统的内核版本安装依赖包设置国内镜像源如果安装过,卸载旧版本查看仓库中所有,安装测试启动关闭服务加入随机启动二常用命令每次使用命令都需要, 一、docker安装 1、快捷安装 快捷安装参考:https://get.daocloud.io/#inst... curl -sSL https://get.daocloud.io/doc...

    Darkgel 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<