Docker入门

如果考虑到文章的数量,聚会,在不同会议上的演讲提交,推文和其他指标,那么看来Docker将会解决世界饥饿问题。 如果会的话会很好,但显然不会。 但这确实可以很好地解决一个问题!

让我们听听@solomonstre -Docker项目的创建者!



简而言之,Docker通过轻松构建和共享包含应用程序的整个环境或应用程序操作系统的映像,简化了软件交付。

应用程序操作系统是什么意思?

您的应用程序通常需要特定版本的操作系统,应用程序服务器,JDK,数据库服务器,可能需要调整配置文件以及类似的多个其他依赖项。 该应用程序可能需要绑定到特定端口和一定数量的内存。 运行应用程序所需的组件和配置一起称为应用程序操作系统。

您当然可以提供一个安装脚本,该脚本将下载并安装这些组件。 Docker通过允许创建一个将您的应用程序和基础架构一起包含在一个组件中的映像,简化了此过程。 这些映像然后用于创建在Docker提供的容器虚拟化平台上运行的Docker 容器

Docker的主要组件是什么?

Docker具有两个主要组件:

  • Docker:开源容器虚拟化平台
  • Docker Hub :用于共享和管理Docker映像的SaaS平台

Docker使用Linux容器来提供隔离,沙箱,可重现性,约束资源,快照和其他一些优点。 在InfoQ上阅读有关Docker容器的出色文章,以获取更多详细信息。

映像是Docker的“构建组件”,是应用程序操作系统的只读模板。 容器是运行时表示形式,并根据图像创建。 它们是Docker的“运行组件”。 可以运行,启动,停止,移动和删除容器。 图像存储在注册表中,即Docker的“分发组件”。

Docker又包含两个组件:

  • 守护进程在主机上运行,​​并负责构建,运行和分发Docker容器。
  • 客户端是一个Docker二进制文件,它接受用户的命令并与守护程序进行来回通信

这些如何一起工作?

客户端与驻留在同一主机或不同主机上的Daemon通信。 它请求守护程序使用pull命令从存储库中提取图像。 然后,守护程序会从Docker Hub或任何配置的注册表中下载映像。 可以从注册表下载多个映像并将其安装在Daemon主机上。

docker-architecture-techtip39

然后,客户端可以使用run命令启动Container。 客户端命令的完整列表可以在这里看到

客户端使用套接字或REST API与Daemon通信。

因为Docker使用Linux内核功能,这是否意味着我只能在基于Linux的机器上使用它?

可以从docs.docker.com/installation/安装用于不同操作系统的Docker守护程序和客户端。 如您所见,它可以安装在包括Mac和Windows在内的各种平台上。

对于非Linux机器,需要安装轻型虚拟机,并在其中安装Daemon。 然后,将本机客户端安装在与守护程序通信的计算机上。 这是在Mac上启动Docker守护程序的日志:

bash
unset DYLD_LIBRARY_PATH ; unset LD_LIBRARY_PATH
mkdir -p ~/.boot2docker
if [ ! -f ~/.boot2docker/boot2docker.iso ]; then cp /usr/local/share/boot2docker/boot2docker.iso ~/.boot2docker/ ; fi
/usr/local/bin/boot2docker init 
/usr/local/bin/boot2docker up && export DOCKER_HOST=tcp://$(/usr/local/bin/boot2docker ip 2>/dev/null):2375
docker version
~> bash
~> unset DYLD_LIBRARY_PATH ; unset LD_LIBRARY_PATH
~> mkdir -p ~/.boot2docker
~> if [ ! -f ~/.boot2docker/boot2docker.iso ]; then cp /usr/local/share/boot2docker/boot2docker.iso ~/.boot2docker/ ; fi
~> /usr/local/bin/boot2docker init 
2014/07/16 09:57:13 Virtual machine boot2docker-vm already exists
~> /usr/local/bin/boot2docker up && export DOCKER_HOST=tcp://$(/usr/local/bin/boot2docker ip 2>/dev/null):2375
2014/07/16 09:57:13 Waiting for VM to be started...
.......
2014/07/16 09:57:35 Started.
2014/07/16 09:57:35 To connect the Docker client to the Docker daemon, please set:
2014/07/16 09:57:35     export DOCKER_HOST=tcp://192.168.59.103:2375
~> docker version
Client version: 1.1.1
Client API version: 1.13
Go version (client): go1.2.1
Git commit (client): bd609d2
Server version: 1.1.1
Server API version: 1.13
Go version (server): go1.2.1
Git commit (server): bd609d2

例如,可以按照docs.docker.com/installation/mac上的说明将Docker Daemon和Client安装在Mac上。

可以通过以下方式从CLI停止VM:

boot2docker stop

然后重新启动为:

boot2docker boot

并以以下身份登录:

boot2docker ssh

boot2docker命令的完整列表可在帮助中找到:

~> boot2docker help
Usage: boot2docker []  []

boot2docker management utility.

Commands:
    init                    Create a new boot2docker VM.
    up|start|boot           Start VM from any states.
    ssh [ssh-command]       Login to VM via SSH.
    save|suspend            Suspend VM and save state to disk.
    down|stop|halt          Gracefully shutdown the VM.
    restart                 Gracefully reboot the VM.
    poweroff                Forcefully power off the VM (might corrupt disk image).
    reset                   Forcefully power cycle the VM (might corrupt disk image).
    delete|destroy          Delete boot2docker VM and its disk image.
    config|cfg              Show selected profile file settings.
    info                    Display detailed information of VM.
    ip                      Display the IP address of the VM's Host-only network.
    status                  Display current state of VM.
    download                Download boot2docker ISO image.
    version                 Display version information.

聊够了,给我举个例子吗?

一些JBoss项目可从www.jboss.org/docker以Docker映像的形式获得,并且可以按照该页面上说明的命令进行安装。 例如,可以将WildFly Docker映像安装为:

~> docker pull jboss/wildfly
Pulling repository jboss/wildfly
2f170f17c904: Download complete 
511136ea3c5a: Download complete 
c69cab00d6ef: Download complete 
88b42ffd1f7c: Download complete 
fdbe853b54e1: Download complete 
bc93200c3ba0: Download complete 
0daf76299550: Download complete 
3a7e1274035d: Download complete 
e6e970a0db40: Download complete 
1e34f7a18753: Download complete 
b18f179f7be7: Download complete 
e8833789f581: Download complete 
159f5580610a: Download complete 
3111b437076c: Download complete

可以使用以下命令验证图像:

~> docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
jboss/wildfly       latest              2f170f17c904        8 hours ago         1.048 GB

下载映像后,可以按以下方式启动容器:

docker run jboss/wildfly

默认情况下,Docker容器不提供交互式shell和来自STDIN的输入。 因此,如果使用上述命令启动WildFly Docker容器,则无法使用Ctrl + C终止它。指定-i选项将使其具有交互性,并且-t选项将分配一个伪TTY。

另外,我们还希望使端口8080可以在容器外部(即在我们的本地主机上)访问。 这可以通过指定-p 80:8080来实现,其中80是主机端口,而8080是容器端口。

因此,我们将容器运行为:

docker run -i -t -p 80:8080 jboss/wildfly
=========================================================================

  JBoss Bootstrap Environment

  JBOSS_HOME: /opt/wildfly

  JAVA: java

  JAVA_OPTS:  -server -Xms64m -Xmx512m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true

=========================================================================

22:08:29,943 INFO  [org.jboss.modules] (main) JBoss Modules version 1.3.3.Final
22:08:30,200 INFO  [org.jboss.msc] (main) JBoss MSC version 1.2.2.Final
22:08:30,297 INFO  [org.jboss.as] (MSC service thread 1-6) JBAS015899: WildFly 8.1.0.Final "Kenny" starting
22:08:31,935 INFO  [org.jboss.as.server] (Controller Boot Thread) JBAS015888: Creating http management service using socket-binding (management-http)
22:08:31,961 INFO  [org.xnio] (MSC service thread 1-7) XNIO version 3.2.2.Final
22:08:31,974 INFO  [org.xnio.nio] (MSC service thread 1-7) XNIO NIO Implementation Version 3.2.2.Final
22:08:32,057 INFO  [org.wildfly.extension.io] (ServerService Thread Pool -- 31) WFLYIO001: Worker 'default' has auto-configured to 16 core threads with 128 task threads based on your 8 available processors
22:08:32,108 INFO  [org.jboss.as.clustering.infinispan] (ServerService Thread Pool -- 32) JBAS010280: Activating Infinispan subsystem.
22:08:32,110 INFO  [org.jboss.as.naming] (ServerService Thread Pool -- 40) JBAS011800: Activating Naming Subsystem
22:08:32,133 INFO  [org.jboss.as.security] (ServerService Thread Pool -- 45) JBAS013171: Activating Security Subsystem
22:08:32,178 INFO  [org.jboss.as.jsf] (ServerService Thread Pool -- 38) JBAS012615: Activated the following JSF Implementations: [main]
22:08:32,206 WARN  [org.jboss.as.txn] (ServerService Thread Pool -- 46) JBAS010153: Node identifier property is set to the default value. Please make sure it is unique.
22:08:32,348 INFO  [org.jboss.as.security] (MSC service thread 1-3) JBAS013170: Current PicketBox version=4.0.21.Beta1
22:08:32,397 INFO  [org.jboss.as.webservices] (ServerService Thread Pool -- 48) JBAS015537: Activating WebServices Extension
22:08:32,442 INFO  [org.jboss.as.connector.logging] (MSC service thread 1-13) JBAS010408: Starting JCA Subsystem (IronJacamar 1.1.5.Final)
22:08:32,512 INFO  [org.wildfly.extension.undertow] (MSC service thread 1-9) JBAS017502: Undertow 1.0.15.Final starting
22:08:32,512 INFO  [org.wildfly.extension.undertow] (ServerService Thread Pool -- 47) JBAS017502: Undertow 1.0.15.Final starting
22:08:32,570 INFO  [org.jboss.as.connector.subsystems.datasources] (ServerService Thread Pool -- 27) JBAS010403: Deploying JDBC-compliant driver class org.h2.Driver (version 1.3)
22:08:32,660 INFO  [org.jboss.as.connector.deployers.jdbc] (MSC service thread 1-10) JBAS010417: Started Driver service with driver-name = h2
22:08:32,736 INFO  [org.jboss.remoting] (MSC service thread 1-7) JBoss Remoting version 4.0.3.Final
22:08:32,836 INFO  [org.jboss.as.naming] (MSC service thread 1-15) JBAS011802: Starting Naming Service
22:08:32,839 INFO  [org.jboss.as.mail.extension] (MSC service thread 1-15) JBAS015400: Bound mail session
22:08:33,406 INFO [org.wildfly.extension.undertow] (ServerService Thread Pool -- 47) JBAS017527: Creating file handler for path /opt/wildfly/welcome-content 
22:08:33,540 INFO [org.wildfly.extension.undertow] (MSC service thread 1-13) JBAS017525: Started server default-server. 
22:08:33,603 INFO [org.wildfly.extension.undertow] (MSC service thread 1-8) JBAS017531: Host default-host starting 
22:08:34,072 INFO [org.wildfly.extension.undertow] (MSC service thread 1-13) JBAS017519: Undertow HTTP listener default listening on /0.0.0.0:8080 
22:08:34,599 INFO [org.jboss.as.server.deployment.scanner] (MSC service thread 1-11) JBAS015012: Started FileSystemDeploymentService for directory /opt/wildfly/standalone/deployments 
22:08:34,619 INFO [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-9) JBAS010400: Bound data 
22:08:34,781 INFO [org.jboss.ws.common.management] (MSC service thread 1-13) JBWS022052: Starting JBoss Web Services - Stack CXF Server 4.2.4.Final
22:08:34,843 INFO [org.jboss.as] (Controller Boot Thread) JBAS015961: Http management interface listening on http://0.0.0.0:9990/management
22:08:34,844 INFO [org.jboss.as] (Controller Boot Thread) JBAS015951: Admin console listening on http://0.0.0.0:9990
22:08:34,845 INFO [org.jboss.as] (Controller Boot Thread) JBAS015874: WildFly 8.1.0.Final "Kenny" started in 5259ms - Started 184 of 233 services (81 services are lazy, passive or on-demand)

容器的IP地址可以找到:

~> boot2docker ip

The VM's Host only interface IP address is: 192.168.59.103

可以使用以下命令验证启动的容器:

~> docker ps
CONTAINER ID        IMAGE                  COMMAND                CREATED             STATUS              PORTS                NAMES
b2f8001164b0        jboss/wildfly:latest   /opt/wildfly/bin/sta   46 minutes ago      Up 12 minutes       8080/tcp, 9990/tcp   sharp_pare

现在,可以在本地计算机上以http://192.168.59.103访问WildFly服务器,如下所示:

wildfly-output-techtip39-942x1024

最后,可以通过按Ctrl + C或通过以下命令来停止容器:

~> docker stop b2f8001164b0
b2f8001164b0

从“ docker ps”获得的容器标识在此处传递给命令。

可以在github.com/jboss/dockerfiles/blob/master/wildfly/README.md中找到使用此映像的更多详细说明,例如以域模式启动,部署应用程序等。

您还想在WildFly Docker映像中看到什么? 在github.com/jboss/dockerfiles/issues上提交问题。

jboss.org/docker上可用的其他图像是:

翻译自: https://www.javacodegeeks.com/2014/10/getting-started-with-docker.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值