Docker学习笔记(一)Docker初体验

Docker学习笔记(一)Docker初体验

什么是Docker

Docker是一个虚拟环境容器,可以将开发环境、代码、配置文件等一并打包到这个容器中,并发布应用到任意平台中

Docker的安装

在Doker的官方网站 点击Download from Docker Store,在docker store中点击GetDocker即可下载mac的dmg文件


下载完成后,正常安装运行

错误

打开Docer发现如下错误

>
Docker does not rely on VirtualBox but may not work properly on systems with VirtualBox v4.3.28 is currently installed.
Please upgrade or uninstall VirtualBox

大致的意思就是说 虽然Docker不依赖于VirtualBox,但是在VirtualBox版本太低的电脑上无法运行,可以选择写在VirtualBox或者更新VirtualBox,尝试卸载ViertualBox后问题依旧,最后在VirtualBox官网更新了最新版本的VirtualBox之后 问题解决,打开Docker,Docker正常运行

安装完成后,可以使用 docker version 来查看版本信息

安装完成后,再注册一个Docker的账号

第一个docker镜像

基本命令

docker pull [options] name[:tag]

  • 该命令会从docker的远程仓库拉取docker的镜像
  • name : 表示镜像的名称
  • tag : 表示镜像的版本,如果不填写,默认是最新版本的docker

docker images [options][repository[:tag]]

  • 该命令会查看本机都有哪些镜像,可以用来验证pull是否成功
  • repository : 指定镜像名称
  • tag : 版本

docker仓库(Repository)

官方仓库,该仓库是官方仓库,但是访问速度比较慢
网易蜂巢镜像中心,需要登录后访问该网址
docker也支持自己搭建镜像仓库

HelloWord

下载

输入命令,该命令会从官方仓库去下载镜像

docker pull hello-world

运行

命令:
docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...]

  • IMAGE : 镜像的名字
  • options : -d 在后台运行
doker ps

可查看当前机器上所启动的镜像

docker exec # 进入容器内部
exit #退出

执行

docker run hello-world

docker 网络

下载nginx

  1. 下载Nginx镜像 : hub.c.163.com/library/nginx
  2. 在后台运行镜像
  3. 使用docker run -d hub.c.163.com/library/nginx来在后台启动nginx镜像,会返回容器的ID
  4. 进入容器内部 docker exec -it 容器id bash
    -i : 可以保证输入有效
    -t : 容器会分配给我们一个终端
    容器id 可以只写前几个字母

docker网络

Docker网络类型

docker中有3中网络类型

  • Bridge : docker中每一个容器默认都是独立的网络,默认选项
  • Host : 和主机使用同一个网络
  • None : 没有网络

端口映射

在容器中的端口和主机中的端口建立一个映射
使用命令

docker run -d -p 8080:80 hub.c.163.com/library/nginx

来启动容器,-p的参数表示主机的8080端口映射到容器的80端口,访问主机的8080端口即可放完到nginx了

Docker中关于镜像的基本操作

利用镜像启动一个容器后进行修改 ==> 利用commit提交更新后的副本

下载centos镜像并启动,进入容器

docker pull hub.c.163.com/library/centos:latest
docker run -it hub.c.163.com/library/centos
root@307bb1848b9e:/# git --version
bash: git: command not found

发现没有安装git,使用yum命令安装git,安装完成后再检查git命令:

执行commit操作将容器转换为一个镜像

docker commit -m "centos with git" -a "cfy" 307bb1848b9e cfy/centos:git

其中, -m指定说明信息;-a 指定用户信息307bb1848b9e为容器的id;使用docker ps -a命令查询得到;cfy/centos:git指定目标镜像的用户名,仓库名和tag信息
操作完成后使用docker images查看:

此时我们在进入该docker,检查git

~ docker run -it cfy/centos:git bash
[root@f952d74b63af /]# git --version
git version 1.8.3.1

制作自己的镜像

  • Dockerfile : 告诉docker如何制作镜像,每一个步骤是什么
  • docker build : 根据Dockerfile来制作镜像
  • JPress : 一个开源的Java博客平台(jpress.io)

创建DockerFile

说明

Dockerfile可以理解为一种配置文件,用来告诉docker build命令应该执行哪些操作,一个建议的Dockerfile文件如下所示

# 说明该镜像以哪个镜像为基础
FROM centos:latest

# 构建者的基本信息
MAINTAINER cfy

# 在build这个镜像时执行的操作
RUN yum update
RUN yum install -y git

# 拷贝本地文件到镜像中
COPY ./* /usr/share/gitdir/
创建Tomcat的镜像

首先下载tomcat的镜像

docker pull hub.c.163.com/library/tomcat:latest

编写镜像的Dockerfile

form hub.c.163.com/library/tomcat

MAINTAINER liuguoguo 734481463@qq.com

# 将本地的war包拷贝到tomcat的目录中
COPY jpress.war /usr/local/tomcat/webapps

使用build命令来构建镜像

docker build -t jpress:latest .

-t表示来为镜像起一个名字和标签,最后的点表示在当前目录寻找Dockerfile文件,这里要注意该命令会默认将Dockerfill所在目录下的所有文件发送到Daemon,这就会导致内容非常多,尽量使用空目录来存放dockerfile和所需要的资源文件

运行自己的TomCat

启动容器

docker run -d -p 8888:8080 jpress

在浏览器输入 http://localhost:8888/jpress/ 出现如下信息:

证明我们的tomcat运行成功了,可以看到jpress需要一个mysql数据库,来下载一个mysql的容器

docker pull hub.c.163.com/library/mysql:latest


在页面中可以找到mysql的使用命令,-e为docker的命令,表示要输入一个环境变量,参数为键值对,可以指定数据库的密码,接着运行mysql

docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=A_000000 -e MYSQL_DATABASE=jpress  hub.c.163.com/library/mysql:latest

将mysql映射到3307端口,并设定MYSQL的密码为A_000000,数据库名为jpress,这样mysql就能成功运行了,检查一下3307端口是否正常监听:

netstat -na|grep 3307


可以看到3307端口已经开启监听了

配置JPress


数据库名和用户名密码填写mysql的设置用户名及密码,而数据库的主机不能填写localhost,因为tomcat在容器内部如果填写localhost则代表是容器自己,需要填写我们电脑的ip地址,端口号则填写我们做映射的端口号,点击下一步

设置网站的用户名和密码,下一步

jPress告诉我们需要重启web服务器

docker restart 4b0e395d1cbc # 输入id重启容器,该命令不会改变容器的id


再看一下网站

发现我们的网站已经起来了

容器连接

在测试之前可以使用docker stop 容器ID指令来将之前的容器停止,而容器停止之后,之前设置的东西就全部会小时
使用主机ip进行转发的这种连接tomcat和mysql方式显然不好,如果我们的主机ip地址发生了变化,那么配置就会失效,而docker允许容器之间课件并安全的创建连接,首先我们创建数据库容器

docker run -d --name db -p 3307:3306 -e MYSQL_ROOT_PASSWORD=A_000000 -e MYSQL_DATABASE=jpress  hub.c.163.com/library/mysql:latest

与之前不同的是,我们使用–name指令,为数据库容器起了一个名字叫db

可以看到数据库容器已经有了一个名字叫db,然后运行tomcat容器

docker run -d -p 8888:8080 --name jpress --link db:db jpress

同样的将tomcat容器映射到8888端口,然后为容器起一个名字叫jpress,并通过–link指令来连接容器,link指令:

--link name:alias 

name是我们连接容器的名字,alias是连接的别名,

回到我们jpress的设置页面,其他项都不变,注意数据库主机这里填写我们连接的别名,即可连接到数据库

总结

Docker思想

想要把程序部署到另外一台计算机中,把所有的相关程序利用docker打包,这里面包含了程序所有的开发环境,可以做到开发环境与生产环境的同一,并标准化的运输,其实Docker与虚拟机差不多,但是Docker要比虚拟机小快很多,例如启动一个虚拟机可能需要几分钟,但是启动一个docker只需要几秒

Docker的三个基本概念

1. 镜像(Image)

类似于虚拟机中的镜像,是一个包含有文件系统的面向Docker引擎的只读模板。任何应用程序运行都需要环境,而镜像就是用来提供这种运行环境的。例如一个Ubuntu镜像就是一个包含Ubuntu操作系统环境的模板,同理在该镜像上装上Apache软件,就可以称为Apache镜像

2. 容器(Container)

类似于一个轻量级的沙盒,可以将其看作一个极简的Linux系统环境(包括root权限、进程空间、用户空间和网络空间等),以及运行在其中的应用程序。Docker引擎利用容器来运行、隔离各个应用。容器是镜像创建的应用实例,可以创建、启动、停止、删除容器,各个容器之间是是相互隔离的,互不影响。注意:镜像本身是只读的,容器从镜像启动时,Docker在镜像的上层创建一个可写层,镜像本身不变。而容器可以理解为一个操作系统的进程

3. 仓库(Repository)

类似于代码仓库,这里是镜像仓库,是Docker用来集中存放镜像文件的地方。注意与注册服务器(Registry)的区别:注册服务器是存放仓库的地方,一般会有多个仓库;而仓库是存放镜像的地方,一般每个仓库存放一类镜像,每个镜像利用tag进行区分,比如Ubuntu仓库存放有多个版本(12.04、14.04等)的Ubuntu镜像。

猜你喜欢

转载自blog.csdn.net/cfy137000/article/details/78143840