介绍
容器的出现,超乎我们程序员的想象,更是对中小型企业在开发部署上的开销带来极小的成本。更有当下的微服务架构演变出来的产品有很多的应用需要部署在多个VM中,可以说Docker是应运而生了。总而言之,Docker就是在一台宿主机上将资源(内存、CPU等)分割成一个个独立的“小盒子”,它们之间都有自己独立的虚拟系统,其实就是一个VM的简易版,里面也是一个Linux的小系统,只有部分命令(吐槽下,居然没有vi~~~~~),每个小VM都有一个虚拟网卡,其实用过KVM的都很容易理解了。
软件准备
- Ubuntu Artful 17.10
- Docker CE
安装
确保操作系统中没有安装docker相关的东西,如果有先卸载之。
$ sudo apt-get remove docker docker-engine docker.io
更新Ubuntu的软件源
$ sudo apt-get update
添加Docker的GPG key:
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
验证Docker的apt-key指纹
$ sudo apt-key fingerprint 0EBFCD88 #一般验证后8位即可
添加docker软件源,再更新软件依赖
$ sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
# $(lsb_release -cs)替换成你操作系统的别名(在终端执行lsb_release -cs),我这里是artful
安装docker
$ sudo apt-get update
$ sudo apt-get install docker-ce #sudo apt-get install docker-ce=<VERSION>
使用
sdnware@sdnware-Lenovo-H3050:~$ sudo docker --help
[sudo] password for sdnware:
Usage: docker COMMAND
A self-sufficient runtime for containers
Options:
--config string Location of client config files (default "/home/sdnware/.docker")
-D, --debug Enable debug mode
...
...
Management Commands:
config Manage Docker configs
container Manage containers
...
...
配置国内镜像仓库
$ sudo vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
配置docker远程连接(用于开发打包image时使用)
$ sudo mkdir /etc/systemd/system/docker.service.d
$ sudo vim http-proxy.conf
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
# 这样,就可以在形如maven的plugin插件中指定响应的docker host了,
# 通过mvn docker:build就能将项目以Dockerfile规则打包成远程docker的image文件。
常用命令
$ sudo docker search xxx # 在镜像仓库中查询xxx软件包
$ sudo docker images # 查看当前已经下载的image
$ sudo docker pull xxx # 下载安装软件镜像
$ sudo docker run --name xx -p 80:8080 -d xxx # 在xx容器中运行xxx软件,将宿主端口80映射到docker中的8080
$ sudo docker ps [-a] # 查看docker中运行的软件进程,-a表示正在运行及未运行的所有进程
$ sudo docker stop xx # 停止运行的软件进程,xxx可为容器id/names
$ sudo docker restart xx # 重启软件进程,xxx可为容器id/names
$ sudo docker rm xx # 删除一个软件进程,xx可为容器id/names
$ sudo docker rmi xx # 删除一个image,xx为images的REPOSITORY:TAG
...
后记
Docker的应用,不管在开发或线上部署,都是一个非常不错的容器系统,主要它提供了一个镜像仓库,我们可以非常方便的安装我们日常用到的软件,诸如mysql/java/nginx等等,并且还提供自定义镜像发布部署,这样只要一台宿主机,就能部署多个相互隔离的应用系统。