Docker简介
虽然网上已经有铺天盖地的关于docker的各种文档资料,但还是自己简单总结一下关于Docker入门的知识,毕竟不动笔墨不读书!这篇文章的大部分内容来自前阵子看的一本书《Learning Docker》。
Docker是一个开源的容器化引擎,用于自动化打包、交付、部署任何软件应用程序。它最大的优点在于打包后的docker container不仅包含软件自身,而且还包含所有的依赖(二进制程序、库、配置文件、脚本等等)。这意味着一个docker container可以独立运行(self-sufficient)于任何全新的环境中。
容器化(containerization)与虚拟化(virtualization)的主要区别在于, 虚拟机(VM)有自己的OS(Guest OS),借助于Hypervisor运行于宿主系统中(Host OS);而Docker Containers则是直接运行于宿主系统上。因此VM是重量级(Heavyweight)的,而Docker containers是轻量级(Lightweight)的。
提到Docker container,就不得不提LXC(Linux Containers)。LXC可以说是各种containers技术之父, 它提供了一个OS级别的虚拟化环境,以便在一个Linux机器上运行多个相互隔离的Linux系统(容器)。
Docker常用命令
1. sudo docker version
列出docker的版本信息,包括:客户端版本、客户端API版本、服务器端版本、服务器端API版本。
2. sudo docker run
以交互式运行docker container
sudo docker run-it ubuntu:16.04/bin/bash
后台运行docker container
sudo docker run-d ubuntu:16.04/bin/bash-c"while true; do date; sleep 5; done"
比较常用的选项有:
-p:设置端口映射 sudo docker run -d -p 80:80 abc
-e:设置环境变量 sudo docker run -e "name=mick" ubuntu /bin/bash
--rm:container结束时自动删除container
-v:从宿主OS绑定挂载一个目录到container中
3. sudo docker exec
在一个运行的container中执行命令。 如果提供了选项-it,那么会进入交互式环境。这种情况下,当执行exit退出时,container仍然会继续正常运行,不会退出。
sudo dockerexecdate
4. sudo docker commit
从container中创建docker image。这条命令最好在container处于stopped状态执行。如果container是运行状态,那么执行这条命令时会暂停container。当然通常是通过Dockerfile的方式创建docker images。
sudo docker commit
5. sudo docker build
这时创建docker images的命令,当然前提是准备好Dockerfile文件。
下面的例子中设置的proxy只在build过程中有效。因为有时build过程中需要访问网络,所以需要设置代理。当然如果在Dockerfile通过ENV命令设置环境变量也可以。
sudo docker build-t myuser/myimage--build-arg http_proxy='http://www.yourproxy.com:80'--build-arg https_proxy='https://www.yourproxy.com:80'.
6. sudo docker start/stop/restart/pull/ps/log/rm/rmi
这些都是常用的命令,就不一一举例了。
Dockfile
例一:ubuntu:16.04是一个现有的images,但里面没有安装一些有用的工具。下面的例子就是在这个image的基础上将一些常用的工具安装上。
可以用命令以下命令创建image,
sudo docker build-t myubuntu.
例二:
下面的Dockerfile将Kenshin打包到docker image中。
FROM python:2.7
ENV http_proxy http://www.proxy.com:80
ENV https_proxy https://www.proxy.com:80
# Build
RUN cd/\
&&git clone https://github.com/douban/Kenshin.git \
&&cdKenshin\
&&pip install-r requirements.txt \
&&misc/init_setup_demo.sh \
&&python setup.py build_ext--inplace&&python setup.py install \
&&cd/\
&&git clone https://github.com/douban/graphite-kenshin.git \
&&cd graphite-kenshin \
&&pip install-r pip-req.txt \
&&python setup.py install \
&&cd/\
&&git clone https://github.com/douban/carbon-c-relay.git \
&&cd carbon-c-relay \
&&make
# Configure
RUN sed-i's,,/Kenshin,'/graphite-kenshin/conf/graphite-api.yaml
# Start script
COPY start.sh/
RUN sed-i's/\r$//'/start.sh&&\
chmod+x/start.sh
EXPOSE200380
ENTRYPOINT["/start.sh"]
start.sh脚本如下:
#!/bin/bash
mkdir-p/Kenshin/storage/data
mkdir-p/Kenshin/storage/link
python/Kenshin/bin/rurouni-cache.py--config=/Kenshin/conf/rurouni.conf--instance=start&
python/Kenshin/bin/rurouni-cache.py--config=/Kenshin/conf/rurouni.conf--instance=1start&
sleep5
GRAPHITE_API_CONFIG=/graphite-kenshin/conf/graphite-api.yaml/usr/local/bin/gunicorn-w2 graphite_api.app:app-b0.0.0.0:80&
sleep5
/carbon-c-relay/relay-p2003-f/graphite-kenshin/conf/relay.conf-S1-H relay_0
https://hub.docker.com/
这是保存docker image的中央仓库,可以免费注册。
使用如下命令push你的image到中央仓库。
sudo docker login
sudo docker push yourimage
灵活使用现有的docker images
现在网上有很多各种各样的docker images,基本只要你想得到的,都有现成的docker images。很多时候,没必要重复造轮子,可以直接使用现在有的docker images。
例一:直接使用现在的MySQL image部署MySQL
sudo docker run--name mysql-e MYSQL_ROOT_PASSWORD=changeme-p3306:3306-d mysql/mysql-server:5.7.18
然后可以随意创建自己的database,
$sudo dockerexec-it mysql mysql-u root-p
mysql>create user'user1'identifiedby'changeme';
mysql>create database db1;
mysql>grant all on db1.*to'user1';
你也可以修改/etc/my.cnf中的配置。
可以用过如下URL访问MySQL,
jdbc:mysql://:3306/db1
--END--
领取专属 10元无门槛券
私享最新 技术干货