zengbin93 / blog

17 stars 10 forks source link

实践 - Docker #3

Open zengbin93 opened 6 years ago

zengbin93 commented 6 years ago

资料推荐

zengbin93 commented 6 years ago

Dockerfile

Dockerfile是Docker自动化创建镜像的配置文件,通常放在项目根目录。使用docker build命令可以从Dockerfile创建镜像。推荐使用Dockerfile进行镜像的定制,不要使用docker commit来创建镜像。

zengbin93 commented 6 years ago

镜像操作

镜像的操作主要包括:1)获取;2)创建;3)查看;4)删除;

获取镜像 - docker pull


DockerHub上面有很多高质量的镜像,因此,大部分时候,我们都可以从远程仓库获取满足需求的镜像。

docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]

创建镜像


DockerHub上找不到满足需求的镜像时,就必须自己动手创建了,方法有以下几种:1)使用Dockerfile定制镜像;2)从rootfs压缩包导入;3)使用docker commit创建等。

最主流的自制镜像方法是使用Dockerfile!尤其不推荐使用docker commit方法创建,理由是:commit是在原有镜像的基础上,再叠加上容器的存储层,并构成新的镜像,也就是说大量的无关文件都会添加到新的镜像中,造成臃肿;此外,使用 docker commit 意味着所有对镜像的操作都是黑箱操作,生成的镜像也被称为黑箱镜像,换句话说,就是除了制作镜像的人知道执行过什么命令、怎么生成的镜像,别人根本无从得知。

如:docker build -t runoob/ubuntu:v1 .

查看镜像


docker images

搜索镜像


docker search 'image name'

执行docker search centos 会从dockerhub上搜索镜像

删除镜像


使用docker rmi 后面加上docker的ID;如果镜像已经创建了一个容器,那么将无法进行删除

zengbin93 commented 6 years ago

容器操作

容器的常用操作包括:1)启动;2)终止;3)删除;4)进入容器;5)导入和导出

启动容器


1. 从镜像创建容器并启动 - docker run

docker run -it --rm ubuntu:16.04 bash

参数说明:

Docker端口映射实现网络访问

启动一个ubuntu容器,并进入bash,如果本地没有ubuntu镜像,直接从远程仓库拉取: docker run -it ubuntu bash

终止容器 - docker stop


默认情况下,指定应用运行结束后,容器会自动终止。终止状态的容器可以通过 docker container ls -a 查看。

zengbin93 commented 6 years ago

Docker简介及其基本原理

Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。其应用场景主要有:1)Web应用的自动化打包和发布;2)自动化测试和持续集成;3)在服务型环境中部署和调整数据库或其他的后台应用等。

官网:https://www.docker.com/ DockerHub:https://hub.docker.com/

Docker是Docker.lnc公司使用Go语言开发的一个基于LXC技术的容器引擎,源代码托管在Github上,遵从Apache2.0协议开源。

镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

类似于虚拟机,启动一个容器就必须要有镜像

运行业务的主体,其实就是从镜像创建的一个实例。可以对容器进行增删改查,容器之间也是相互隔离的。和虚拟机最大的区别就是一个是虚拟的一个是隔离的。 缺点:不会像虚拟机那样隔离的那么彻底,我们可以将容器理解为简化版的linux,有进程运行在里面。

根据docker的三大理念【构建 - 运输 - 运行】,我们就需要一个仓库来存放镜像。简单的说:我们将镜像创建完成就需要存放到仓库里面,进行集中式的管理。仓库这点类似于github,docker也有一个dockerhub,他也是一个公共对外的仓库。

zengbin93 commented 6 years ago

杂记

zengbin93 commented 6 years ago

实用操作集合

zengbin93 commented 6 years ago

Docker Compose

Docker Compose是一种用于通过使用单个命令创建和启动Docker应用程序的工具。我们可以使用它来配置应用程序的服务。它是开发,测试和升级环境的好工具。

它提供以下命令来管理应用程序的整个生命周期。

zengbin93 commented 6 years ago

ubuntu16.4 安装&配置Docker

https://docs.docker.com/install/linux/docker-ce/ubuntu/

测试使用的是root用户

安装方法有三个:1)设置Docker的库,然后安装;2)下载DEB包,然后全手动安装;3)下载可信脚本自动安装。

对于开发和测试来说,使用脚本安装是最方便的,当然,下载脚本后要先看看,然后再执行。

$ curl -fsSL get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh

执行 docker run hello-world 看看docker有没有安装成功,正常输出结果如下图: image

https://docs.docker.com/install/linux/linux-postinstall/

增加docker用户组,并把需要使用docker的用户加进去,参考: https://docs.docker.com/install/linux/linux-postinstall/#manage-docker-as-a-non-root-user

设置docker开机启动 $ sudo systemctl enable docker

zengbin93 commented 6 years ago

部署MySQL数据库

step 1. 拉取镜像:docker pull mysql/mysql-server:tag

tag可选值 5.5, 5.6, 5.7, 8.0, latest,默认是latest

step 2. 从镜像启动一个容器

默认端口:3306 docker run -p 3306:3306 --name=mysql1 -d mysql/mysql-server:tag

mysql服务器启动后,会为root用户创建一个随机密码,执行一下代码可以查看

docker logs mysql1 2>&1 | grep GENERATED

step 3. 连接mysql数据库,修改root用户密码

docker exec -it mysql1 mysql -uroot -p

默认情况下,MYSQL_ONETIME_PASSWORD是True,所以第一次连接之后必须修改root用户的密码

ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';

【可选】配置root用户的远程连接 grant all PRIVILEGES on test_db.* to root@'%' identified by 'password'; flush privileges;