资讯专栏INFORMATION COLUMN

Docker安装与应用

leejan97 / 900人阅读

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

一、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

2.)下载镜像

创建容器前,可先下好远程镜像,也可以在创建时再下载
# 先查找远程镜像
$ docker search xxx
$ docker pull xxx

3.)新建容器

最少参数的创建
# -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

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

原因:需要特权才能启动systemd进程,解决方案:
docker run -dit --privileged 其它参数 init

4.)启动/停止容器

$ docker start | restart xxx  # 启动/重启

$ docker stop xxx  # 停止容器
$ docker kill xxx  # 强行终止,关闭进程

5.)进入容器

# 多窗口同时进入,会同步显示,容易窗口阻塞,适合本地开发
$ docker attach xxx

# 或者,docker在1.3.X版本,新命令
$ docker exec -it xxx /bin/bash

6.)删除容器/镜像

# 删除容器前,先停止
$ docker stop xxx 
$ docker rm xxx

# 删除镜像
$ docker rmi xxx  # -f 强制删除

7.)容器/镜像改名

# 容器改名
$ docker rename 原容器名 新容器名

# 镜像改名
$ docker tag 原镜像 新镜像 # 会生成一个新名,镜像id一样
$ docker rmi 原镜像
三、镜像构建 1、手动构建镜像
用基础镜像创建一个容器,手动安装好一切,然后用容器生成镜像:
$ docker commit 容器名 新镜像名
2、自动构建镜像:Dockerfile

1.)Dockerfile配置

新建Dockerfile并配置相关内容,下面以配置一个基于alpine的pm2安装并运行node应用为例:
# 基础镜像源
FROM alpine

# 创建者信息
MAINTAINER hoby 

#修复时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 
    && echo "Asia/Shanghai" > /etc/timezone

# 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+node+mongo+redis联合容器配置为例:
version: "3"
services:
    web:
        image: nginx
        container_name: encore-web
        restart: always
        ports:
            - 18001:8001
        volumes:
            - ./bin/nginx.conf:/etc/nginx/conf.d/encore.conf
            - ./web/dist:/app/encore/web
        command: ["nginx", "-g", "daemon off;"]
        links:
            - server

    server:
        image: keymetrics/pm2
        container_name: encore-server
        restart: always
        ports:
            - 18100:8100
        volumes:
            - ./server:/app/encore/server
        working_dir: /app/encore/server
        environment:
            - MONGO_SERVER=mongo
            - MONGO_PORT=27017
            - REDIS_SERVER=redis
            - REDIS_PORT=6379
        command: npm start
        links:
            - mongo
            - redis

    mongo:
        image: mongo
        container_name: encore-mongo
        restart: always
        ports:
            - 18017:27017
        volumes:
            - ./mongo/configdb:/data/configdb
            - ./mongo/db:/data/db
        command: mongod --auth

    redis:
        image: redis
        container_name: encore-redis
        restart: always
        ports:
            - 18379:6379
        volumes:
            - ./redis/data:/data
            - ./bin/redis.conf:/usr/local/etc/redis.conf
        command: redis-server /usr/local/etc/redis.conf
需要注意的:  
a.) command支持exec和shell两种模式(见上面的web和server)
b.) nginx、pm2等进程需加--no-daemon参数使其在前台运行,以保证容器不退出
c.) npm start需要设置工作目录
d.) links后,在容器可直接把服务名做为一个hostname访问,如下:
# nginx反向代理
proxy_pass http://server:8100/;

# mongo连接
mongodb://mongo:27017/encore

# node容器可先设置环境变量,再动态获取
"mongodb://www:123456@" + process.env.MONGO_SERVER + ":" + process.env.MONGO_PORT + "/encore"

在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.)交互模式

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

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

2.)入口命令

在容器高级设置里,command里的shell命令必须单个加引号,如:
Command: "pm2" "start" "./www.js" "--no-daemon"
Working Dir:  /app

3.)volume添加

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
  • Windows和Linux容器异同大起底

    摘要:在和系统上均可以运行容器。在这两个操作系统上安装的过程是不同的。为了与本地网络和网络地址转换进行通信,在安装中会为虚拟机配置一个子网,以便你的容器在应用程序中使用。第一个截图显示的是系统的信息,而第二个截图显示了一些在系统上运行的容器。 在Windows和Linux系统上均可以运行Docker容器。Docker在两种操作系统上的工作方式既有相似,又有不同。下面,我将介绍在Windows...

    tianyu 评论0 收藏0
  • Windows和Linux容器异同大起底

    摘要:在和系统上均可以运行容器。在这两个操作系统上安装的过程是不同的。为了与本地网络和网络地址转换进行通信,在安装中会为虚拟机配置一个子网,以便你的容器在应用程序中使用。第一个截图显示的是系统的信息,而第二个截图显示了一些在系统上运行的容器。 在Windows和Linux系统上均可以运行Docker容器。Docker在两种操作系统上的工作方式既有相似,又有不同。下面,我将介绍在Windows...

    plokmju88 评论0 收藏0

发表评论

0条评论

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