docker 笔记一

前言

工作需要自己部署维护服务,本以为会用jenkins做CI,没成想改成docker,回头把一年前刚看了两天的docker又拿来用,这次算是初窥门径吧,话说真的很好用,琢磨写个笔记,以后回顾方便。

基础概念:

用docker务必要先了解三个基础概念,镜像,容器,仓库。以windows下运行ubuntu虚拟机类比理解镜像,容器。

镜像

但凡有点虚拟化概念,基本都立马感知镜像是什么。如果不了解虚拟化,windows下运行 ubuntu 虚拟机,通常我们首先要准备一个ubuntu操作系统的iso文件,这个就是镜像,其就是包含了一个完整ubuntu操作系统的文件系统。

容器

容器就是在镜像为基础,激活后的运行实体。类比面向对象编程中的 类 – 实例 关系理解 镜像 – 容器。镜像是静态的,就是类,容器是镜像的运行实体,就是实例。例如同一ubuntu镜像在vmware中可以同时创建出多个虚拟机,并且同时运行。近似地看ubuntu iso文件就是一个镜像,vamare中运行的多个虚拟机就是 ubuntu镜像的容器,这种理解并不准确,但是能够帮助类比理解镜像和容器间关系。

值得一提的是,容器实质是一个进程,但是区别于普通直接运行的程序进程,容器进程是一个运行程序,但是该程序拥有自己的一套独立文件系统,网络配置,进程空间等等,感知起来类似一个运行在宿主机上的一个独立系统。

仓库

用过git都能理解git的远端仓库,docker中的仓库类似git中的仓库,用来远端存储镜像。

安装

MacOS 安装

安装

在已安装brew的Mac中可以直接利用brew进行docker安装:

brew cask install docker

安装过后在 Launchpad 中能够找到 docker 的 标志图标,点击运行docker,顶部菜单栏:
这里写图片描述

镜像加速器

此时docker已经可以使用,但是默认的镜像获取源是Docker Hub 拉取镜像巨慢无比,强烈建议使用加速器,个人使用的是 DaoCloud加速器,注册后获取加速地址,然后在docker 菜单图标中单击:
Preferences –> Deamon –> Registry mirrors
添加刚刚DaoCloud注册网站获取的加速地址。

CentOS 7.3

安装

docker可以通过yum源安装,也可以通过DaoCloud自动化安装脚本安装:

// 安装docker
]# curl -sSL https://get.daocloud.io/docker | sh
// DaoCloud安装 docker 中不带 docker-compose 组建,安装docker-compose
]# pip install -U docker-compose

安装结果:
这里写图片描述

镜像加速器

CentOS下配置加速器首先需要设置docker 自启动,之后修改配置文件:

// 开机自启动docker服务
]# systemctl enable docker.service
// 修改配置添加 加速器地址 
]# vim /etc/systemd/system/multi-user.target.wants/docker.service
//将 ExecStart做如下配置
ExecStart=/usr/bin/dockerd --registry-mirror=https://jxus37ad.mirror.aliyuncs.com

docker-compose 是一个docker容器的管理工具,多数情况下docker部署应用时需要多个服务配合进行,此时多个服务可以做成多个镜像利用docker-compose管理多个镜像运行的容器。
绝对的神器!

第一个docker示例

利用docker在机器上启动一个mysql服务,基本步骤
step1:
编写Dockerfile文件。Dockerfile是构建镜像的基础文件,用来制定自制镜像的依赖等等。Dockerfile编写规则详介。
示例Dockerfile内容:

FROM mysql:5.7
COPY my.cnf /etc/mysql/
EXPOSE 3306
CMD ["mysqld"]

如果去上面官网介绍中看过Dockerfile编写规则,则非常容易理解上面Dockerfile内容。

step2:
生成自定义镜像,运行docker build 命令:

// 生成镜像 名为test_mysql tag为latest镜像
]# docker build -t test_my .
// 查看新生成镜像
]# docker image ls

step3:
从镜像生成容器,并运行:

// 生成容器 并且制定端口映射环境变量等参数
]# docker run -p 3309:3306 --name test_mysql_container -e MYSQL_ROOT_PASSWORD=mysql -d test_mysql
// 查看新生成容器
]# docker container ls

实际效果:
这里写图片描述


说明:
1,FROM mysql:5.7 拉取mysql Tag为5.7的镜像,CMD启动镜像中mysql服务,但是默认mysql是3306端口,这是在容器内部的服务端口,外部想链接容器服务必须将3306端口暴露出来,EXPOSE完成功能。
2,启动容器命令通过 p 参数指定了端口映射,将容器的端口3306指定映射到宿主机的端口3309,这样其他机器可以通过宿主机地址试用该容器的mysql服务。

docker命令极其多,不过说明也非常详细,类似linux命令help,可以通过help方式查看命令使用。常用几个命令:

// 生成镜像
docker build --help
// 启动容器
docker run --help
//镜像管理
docker image --help
//容器管理
docker container --help
//容器管理列表 -a 罗列所有容器,无论运行与否,无-a仅显示运行容器
docker container ls -a 


当修改了Dockerfile时,必须重新biuld才会使修改的配置等生效。直接 “docker build .”会将本次build到最近用docker file 生成的镜像中。

容器管理

docker-compose 组件用来管理多个容器,对于实际工程肯定是多个服务协作完成,一个小python demo可能要用到mysql服务,redis服务等,那么如果想将这个工程docker化并可以手动开启mysql,redis docker容器,在配置python工程docker启动。这样需要手动管理三个容器,非常繁琐。而docker-compose正是为这个而生,可以在一个文件中定义多个容器,然后一次性启动,停止。并且一个文件中定义的容器,基础网络是彼此互通的内网。docker-compose详解
看一个简单示例,docker-compose的文件以.yml后缀
docker-compose.yml文件内容:

version: '2'

services:
    mysql-master:
        image: master/mysql
        ports:
         - "3307:3306"
        container_name: "mysql_master"
        environment:
            MYSQL_ROOT_PASSWORD: "master"

    mysql-slave:
        image: slave/mysql
        ports:
         - "3308:3306"
        container_name: "mysql_slave"
        environment:
            MYSQL_ROOT_PASSWORD: "slave"

想要启动两个mysql 服务作为主从数据库而编写的yml文件,启动容器

// docker-compose 后台启动容器
]# docker-compose up -d
// 修改yml或dockerfile后重新build
]# docker-compose build

在运行的容器中,是可以进入容器中查看容器内状态的,就像远程ssh登录服务器一样:输入命令

// 进入容器
]# docker exec -it container_id /bin/bash

容器使用极大方便了安装部署的繁琐工作,并且对于服务器维护也方便多了,不再是乱七八糟安一堆服务,平时用来玩一些小东西,用过后直接删除镜像容器即可~

当然其中还有很多问题,尤其是容器间通信,网络相关问题,以后若有相关积累在行奉上。

后续请参见:docker 笔记二 。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值