社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
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 pull [options] name[:tag]
docker images [options][repository[:tag]]
官方仓库,该仓库是官方仓库,但是访问速度比较慢
网易蜂巢镜像中心,需要登录后访问该网址
docker也支持自己搭建镜像仓库
输入命令,该命令会从官方仓库去下载镜像
docker pull hello-world
命令:docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...]
-d
在后台运行doker ps
可查看当前机器上所启动的镜像
docker exec # 进入容器内部
exit #退出
执行
docker run hello-world
docker run -d hub.c.163.com/library/nginx
来在后台启动nginx镜像,会返回容器的IDdocker exec -it 容器id bash
-i : 可以保证输入有效
-t : 容器会分配给我们一个终端
容器id 可以只写前几个字母
docker中有3中网络类型
在容器中的端口和主机中的端口建立一个映射
使用命令
docker run -d -p 8080:80 hub.c.163.com/library/nginx
来启动容器,-p的参数表示主机的8080端口映射到容器的80端口,访问主机的8080端口即可放完到nginx了
下载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 run -it cfy/centos:git bash
[root@f952d74b63af /]# git --version
git version 1.8.3.1
Dockerfile可以理解为一种配置文件,用来告诉docker build命令应该执行哪些操作,一个建议的Dockerfile文件如下所示
# 说明该镜像以哪个镜像为基础
FROM centos:latest
# 构建者的基本信息
MAINTAINER cfy
# 在build这个镜像时执行的操作
RUN yum update
RUN yum install -y git
# 拷贝本地文件到镜像中
COPY ./* /usr/share/gitdir/
首先下载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和所需要的资源文件
启动容器
docker run -d -p 8888:8080 jpress
在浏览器输入 http://localhost:8888/jpress/ 出现如下信息:
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端口已经开启监听了
数据库名和用户名密码填写mysql的设置用户名及密码,而数据库的主机不能填写localhost,因为tomcat在容器内部如果填写localhost则代表是容器自己,需要填写我们电脑的ip地址,端口号则填写我们做映射的端口号,点击下一步
设置网站的用户名和密码,下一步
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引擎的只读模板。任何应用程序运行都需要环境,而镜像就是用来提供这种运行环境的。例如一个Ubuntu镜像就是一个包含Ubuntu操作系统环境的模板,同理在该镜像上装上Apache软件,就可以称为Apache镜像
类似于一个轻量级的沙盒,可以将其看作一个极简的Linux系统环境(包括root权限、进程空间、用户空间和网络空间等),以及运行在其中的应用程序。Docker引擎利用容器来运行、隔离各个应用。容器是镜像创建的应用实例,可以创建、启动、停止、删除容器,各个容器之间是是相互隔离的,互不影响。注意:镜像本身是只读的,容器从镜像启动时,Docker在镜像的上层创建一个可写层,镜像本身不变。而容器可以理解为一个操作系统的进程
类似于代码仓库,这里是镜像仓库,是Docker用来集中存放镜像文件的地方。注意与注册服务器(Registry)的区别:注册服务器是存放仓库的地方,一般会有多个仓库;而仓库是存放镜像的地方,一般每个仓库存放一类镜像,每个镜像利用tag进行区分,比如Ubuntu仓库存放有多个版本(12.04、14.04等)的Ubuntu镜像。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!