首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Docker简介及入门

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--

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180105G0ZVBL00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券