思考:
FastDFS的安装步骤非常的多,涉及的依赖包也很多,当新的机器需要安装FastDFS时,是否需要从头开始安装。
我们在学习时拿到ubuntu系统的镜像,在VM虚拟机中运行这个镜像后,为什么就可以直接进行开发,而不需要重新搭建开发环境。
在工作中,如何高效的保证开发人员写代码的开发环境与应用程序要部署的生产环境一致性。如果要部署一台新的机器,是否需要从头开始部署。
结论:
上述思考的问题,都涉及到相同的工作是否需要重复做。
避免相同的工作重复做是容器化技术应用之一。
容器化方案:
Docker的目标之一就是缩短代码从开发、测试到部署、上线运行的周期,让我们的应用程序具备可移植性、易于构建、并易于协作。
Docker的镜像概念类似于虚拟机里的镜像,是一个只读的模板,一个独立的文件系统,包括运行容器所需的数据,可以用来创建新的容器。
例如:一个镜像可以包含一个完整的 ubuntu 操作系统环境,里面仅安装了MySQL或用户需要的其它应用程序。
Docker容器是由Docker镜像创建的运行实例,类似VM虚拟机,支持启动,停止,删除等。
每个容器间是相互隔离的,容器中会运行特定的应用,包含特定应用的代码及所需的依赖文件。
Docker的仓库功能类似于Github,是用于托管镜像的。
$ cd docker源码目录
$ sudo apt-key add gpg
$ sudo dpkg -i docker-ce_17.03.2~ce-0~ubuntu-xenial_amd64.deb
$ sudo docker run hello-world
# 启动docker
$ sudo service docker start
# 重启docker
$ sudo service docker restart
# 停止docker
$ sudo service docker stop
$ sudo docker image rm 镜像名或镜像ID
$ sudo docker image rm hello-world
$ sudo docker image rm fce289e99eb9
# 查看正在运行的容器
$ sudo docker container ls
# 查看所有的容器
$ sudo docker container ls --all
$ sudo docker run [option] 镜像名 [向启动容器中传入的命令]
常用可选参数说明: * -i 表示以《交互模式》运行容器。 * -t 表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。 * --name 为创建的容器命名。 * -v 表示目录映射关系,即宿主机目录:容器中目录。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。 * -d 会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器)。 * -p 表示端口映射,即宿主机端口:容器中端口。 * --network=host 表示将主机的网络环境映射到容器中,使容器的网络与主机相同。$ sudo docker run -it --name=ubuntu1 ubuntu /bin/bash
在容器中可以随意执行linux命令,就是一个ubuntu的环境。 当执行 exit 命令退出时,该容器随之停止。
如果对于一个需要长期运行的容器来说,我们可以创建一个守护式容器。 在容器内部执行 exit 命令退出时,该容器也随之停止。
$ sudo docker container rm 容器名或容器id