首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Docker小白学习笔记

Docker小白学习笔记

作者头像
杜金房
发布2020-12-21 11:36:43
发布2020-12-21 11:36:43
1.1K0
举报

什么是Docker

Docker类似于虚拟机,但相比虚拟机,它启动更快(直接进程启动),占用资源少(只占所需资源),体积小(只需要用到的组件即可),可以说是轻量级虚拟机。Docker将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器,程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样,Docker是Linux容器的一种封装。

用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。

为什么使用Docker

作为IT开发人员,软件开发最大的麻烦事之一,就是环境配置。比如FreeSWITCH,不同的操作系统需要安装不同的库和依赖。相同的操作系统,不同的版本所需依赖也不同。随着FreeSWITCH不断更新优化,有些模块在不同环境下对依赖要求也不相同。通常即使解决了这个版本的使用,其他版本也会有其他问题。

在开发过程中,同事经常会问为什么相同的代码你能跑起来,而我的环境跑不起来。作为小白,为了搭建开发环境,我们常浪费一天甚至几天时间去查找失败原因(大佬们除外)。为了更快的保持统一,我们使用Docker,下载统一的开发环境,节省了搭建环境时间,保证每一步都同步没有问题。不再出现,换个电脑就要重新搭建环境的问题了。

FreeSWITCH支持各种操作系统下安装配置使用,但相对来说,在Debain下更加稳定,适应性更强,兼容性更好。但,对于很多客户,已经在使用CentOS或其他操作系统,且,技术人员相对于Debain,更熟悉原系统操作指令。如果直接换成Debain,学习成本太大。所以,为了解决这些问题,我们使用Docker部署,这样,即使是CentOS,我们依然可以安装Debain下的FreeSWITCH。

如何使用Docker

Docker安装

访问Docker官方网站https://www.docker.com/,根据需求下载或参照文档进行相应操作,特别注意,大多数版本在CentOS下仅支持7以上版本。

创建镜像

直接从Docker Hub获取已有镜像比如,Nginx、PostgreSQl等,如下所示:

代码语言:javascript
复制
docker pull postgres:11.5

或者利用Dockerfile来创建镜像,我们目前开发的系统XUI即采用了此方法创建镜像,方便大家使用。

Dockerfile基本的语法,使用#来注释,FROM指令告诉Docker使用哪个镜像作为基础,RUN开头的指令会在创建中运行,比如安装一个软件包,在这里使用 apt-get来安装一些依赖。

代码语言:javascript
复制
FROM debian:buster
RUN apt-get update && apt-get install -y ca-certificates curl locales bison
...

编写完成Dockerfile后可以使用docker build来生成镜像。使用如下指令上传镜像保存。

代码语言:javascript
复制
docker push xxxxx.com/xx/xui:release-v1.1

#查看镜像

docker images

#删除镜像

docker rmi imageid

导出镜像

如果你已成功下载某镜像,并在客户私有环境下进行安装使用,我们可将镜像进行打包导出,然后传到客户环境上即可,命令如下:

代码语言:javascript
复制
docker save xxxxx.com/xx/xui:release-v1.1 -o xui-image.tar

#当然,如果想减小包的大小,可使用gzip压缩下,体积会缩小一倍

gzip xui-image.tar

执行如上操作打包并压缩后将得到xui-image.tar.gz文件。

导入镜像

xui-image.tar.gz上传到指定服务器,并导入:

代码语言:javascript
复制
gzip -d xui-image.tar.gz
docker load -i xui-image.tar

导入后使用命令验证:

代码语言:javascript
复制
docker images

启动镜像

首先要保证先启动docker,如下所示:

代码语言:javascript
复制
systemctl start docker

# 设置docker开机启动
systemctl enable docker

准备.env(如果你需要设置一些变量,如果无需变量,可省去此文件),准备docker-compose.yml启动文件,如果为了后续方便,可准备Makefile文件。

其中docker-compose.yml文件为重中之重。参考如下:

代码语言:javascript
复制
version: "3.3"

services:

  xui:
    container_name: "xui-xb"
    image: xxxx/xxx/xui:v1.1
    stdin_open: true
    cap_add:
      - SYS_PTRACE
    tty: true
    restart: always
    env_file: ./.env
    network_mode: host
    logging:
      driver: none
    volumes:
      - /data/xx:/usr/local/data

  xswitch-pg:
    container_name: xui-pg
    image: postgres:11.5
    network_mode: host
    restart: always
    environment:
      - PGDATA=/var/lib/postgresql/data/pgdata
      - TZ=PRC
    volumes:
      - ../pgsql:/var/lib/postgresql/data:cached

使用host模式可以不用进行端口映射(MAC除外,如果你使用MAC,请使用port进行端口映射)。完成yml文件后,即可启动容器了,如下:

代码语言:javascript
复制
//启动
docker-compose -f docker-compose.yml up -d

//关掉
docker-compose -f docker-compose.yml down

查看容器是否启动成功,如下:

代码语言:javascript
复制
docker ps -a

进入容器,查看代码或执行其他操作,如下所示:

代码语言:javascript
复制
docker exec -it xui-xb bash

拷贝文件

如果你想从宿主机传文件到容器,或从容器拷贝到宿主机,可使用如下指令:

代码语言:javascript
复制
docker cp /tmp/xx 96f7f14e99ab:/www/

docker cp 96f7f14e99ab:/www /tmp/

结尾

使用Docker部署实现更轻量级的虚拟化,对环境要求宽松,方便快速部署,极大减少部署的时间成本和人力成本,目前我们已上线的XSWITCH即采用Docker部署,随时轻松升级。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FreeSWITCH中文社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是Docker
  • 为什么使用Docker
  • 如何使用Docker
    • Docker安装
  • 创建镜像
  • 导出镜像
  • 导入镜像
  • 启动镜像
  • 拷贝文件
  • 结尾
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档