如何使用docker开发

Docker是一种革命性的容器技术,它将某些软件包装在一个完整的文件系统中,该文件系统包含运行所需的所有的代码、运行环境、资料等。docker可以运行在任何操作系统上,同时又能保证文件系统互不干扰。

Docker的发明宗旨是成为DevOps(开发人员+操作)工具链的一部分。对于开发人员来说,这意味着他们可以专注于编写代码,而不用担心最终将运行的系统环境。通过使用,docker已经成为了他们代码系统中的一部分。

作为一名开发人员,您无需了解Docker管理的每一个细节,您需要知道的一切将在本文中展示。

接下来的文章需要你已经在你的电脑上安装好docker所需要的环境。

当你的Docker安装运行在Windows或Mac之后。我们首先看看管理Docker虚拟机的docker-machine。

我们使用  docker-machine ls 用来检查我们的docker虚拟机状态。

$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
default - virtualbox Stopped Unknown

“default”是docker安装过程中自动创建的,如果您不需要的话,可以删除后创建新的。

我这里选择删除,使用下面的命令。

$ docker-machine rm default
About to remove default
Are you sure? (y/n): y
Successfully removed default

当我们再次运行“ls”命令时,就什么看不到啦。

$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS

接下来我们将创建一个新的docker-machine来继续我们的教程。我将它命名为“softlab”。这里将使用Oracle的VirtualBox作为虚拟驱动程序 - 对于其他驱动程序,您可以在这里查看

$ docker-machine create --driver virtualbox softlab
Running pre-create checks...
.
.
.
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env softlab

如果你想通过ssh新创建的soflab docker-machine,我们使用“docker-machine ssh softlab”命令来修改。

$ docker-machine ssh softlab

Boot2Docker version 1.12.3, build HEAD : 7fc7575 - Thu Oct 27 17:23:17 UTC 2016

Docker version 1.12.3, build 6b644ec

docker@softlab:~$ 

docker@softlab:~$ exit

我们可以使用该stop 命令来停止docker-machine或者 start 来启动docker-machine。请参阅下面的shell的示例。

$ docker-machine stop softlab
Stopping "softlab"...
Machine "softlab" was stopped.
$ docker-machine start softlab
Starting "softlab"...
(softlab) Check network to re-create if needed...
(softlab) Waiting for an IP...
Machine "softlab" was started.
Waiting for SSH to be available...
Detecting the provisioner...
Started machines may have new IP addresses. You may need to re-run the `docker-machine env` command.
$

有些时候我们需要设置环境变量来配置我们的shell来使用Docker。我们可以通过'env'命令获得这些变量。

$ docker-machine env softlab
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="/Users/dursun/.docker/machine/machines/softlab"
export DOCKER_MACHINE_NAME="softlab"
# Run this command to configure your shell:
# eval $(docker-machine env softlab)

正如在输出中所描述的,我们需要通过eval来设置这些变量   $(docker-machine env softlab)

$ eval $(docker-machine env softlab)

接下来我们在Docker机器上运行Docker容器。首先,我们运行下hello world容器。

$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
c04b14da8d14: Pull complete 
Digest: sha256:0256e8a36e2070f7bf2d0b0763dbabdd67798512411de4cdcf9431a1feb60fd9
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
 3. The Docker daemon created a new container from that image which runs the
     executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
     to your terminal.
     To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash
 Share images, automate workflows, and more with a free Docker Hub account:
 https://hub.docker.com
 For more examples and ideas, visit:
 https://docs.docker.com/engine/userguide/

让我们用ps 命令检查我们的容器  。

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

怎么回事什么都没有?因为'hello world'容器刚刚启动和停止,'ps'命令只显示正在运行的容器。如果我们想查看所有的容器,不管它们是否在运行,我们应该通过'-a'参数。

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
462d32f52d54        hello-world         "/hello"            10 seconds ago      Exited (0) 9 seconds ago                       pensive_tesla

接下来我们来试试一下web服务器

$ docker run -d -p 80:80 --name webserver nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
43c265008fae: Pull complete 
e4c030a565b1: Pull complete 
685b7631c1ce: Pull complete 
Digest: sha256:dedbce721065b2bcfae35d2b0690857bb6c3b4b7dd48bfe7fc7b53693731beff
Status: Downloaded newer image for nginx:latest
dc58b43c56d09e1543bbf59acf23d611d4c25a4b1dd7df65982f9525471eac16

备注:

  • -d表示容器应该运行分离。容器将在后台运行并打印容器ID。
  • -p用于在主机上配置容器的端口映射。请记住,主机是docker,而不是你的本地主机。在这里,容器的80端口将被映射到主机的80端口。如果我们打到主机IP:80就会映射到docker:80。
  • --name用来给我们的容器分配一个名字。如果你省略了这个参数,Docker会自动命名为默认的其他名称。

让我们再次运行ps;

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                         NAMES
dc58b43c56d0        nginx               "nginx -g 'daemon off"   9 seconds ago      Up 10 seconds       0.0.0.0:80->80/tcp, 443/tcp   webserver

看,我们的docker已经正常运行了,现在你就可以通过物理机的ip地址去访问我们搭建好的nginx服务了。

$ docker-machine ip softlab
192.168.99.100

为了停止Web服务器容器,我们将使用该  docker stop 命令。

$ docker stop webserver
webserver
$ docker ps 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

如果您想深入了解,请查看我在Docker中开发Java 8 Spring Boot App的文章  。谢谢~

原文链接:https://dzone.com/articles/docker-for-developers

原文作者:Dursun Koç

发表于

我来说两句

2 条评论
登录 后参与评论

相关文章

来自专栏Java帮帮-微信公众号-技术文章全总结

集群间如何实现session共享【面试+工作】

3445
来自专栏惨绿少年

网络知识 ACL NAT IPv6

第1章 ACL 访问控制列表 访问控制表(Access Control List,ACL),又称存取控制串列,是使用以访问控制矩阵为基础的访问控制方法,每一个对...

2830
来自专栏芋道源码1024

注册中心 Eureka 源码解析 —— Eureka-Server 启动(一)之 ServerConfig

本文主要基于 Eureka 1.8.X 版本 1. 概述 2. EurekaServerConfig 2.1 类关系图 2.2 配置属性 2.3 Default...

3395
来自专栏康怀帅的专栏

RESTful API 设计详解

RESTful 是一种软件架构风格,其面向资源。基于 HTTP 协议实现。 设计概念和准则 所有事物都可以被抽象为资源。 每一个资源都有唯一的资源标识,对资...

3984
来自专栏开发与安全

linux系统编程之进程(二):fork函数相关总结

fork的作用是根据一个现有的进程复制出一个新进程,原来的进程称为父进程(Parent Process),新进程称为子进程(Child Process)。系统中...

2596
来自专栏技术总结

延长你的App在后台的执行时间

1343
来自专栏LuckQI

微服务必学习容器技术Docker系列九~生命周期管理命令

我们前面已经学习了本地容器操作以及版本信息管理,复制提交等容器命令。但是对于怎么启动执行或者操作容器还不是很清楚,今天就来学习下整个容器周期的操作从启动,到停止...

392
来自专栏王浩的专栏

Android 中的 Dalvik Heap 和 Native Heap

Android系统对 dalvik 的 vm heapsize 作了硬性限制,当 java 进程申请的 java 空间超过阈值时,就会抛出OOM异常,可以通过a...

1.7K0
来自专栏博客园

StackExchange.Redis 使用-配置 (四)

Configuration redis有很多不同的方法来配置连接字符串 , StackExchange.Redis 提供了一个丰富的配置模型,当调用Conne...

783
来自专栏小狼的世界

Redis的PHP客户端

Redis支持的客户端种类非常多,包括C、Java、PHP、Python等,本文主要介绍PHP客户端的安装和使用。

593

扫码关注云+社区