如何使用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ç

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏算法修养

Docker 学习应用篇之二: Docker的介绍和安装

   之前说过Docker的好处,Docker可以集装箱化的部署应用程序。那么Docker是通过什么实现的呢。要理解Docker内部构建,需要先理解Docker...

443100

如何在Linode上使用Docker部署nginx容器

根据Docker官网(Docker.com)的说法,容器应该是一个“轻量级,独立的,可执行的软件包,包括运行它所需的一切:代码,运行时,系统工具,系统库和设置。...

30320
来自专栏搜云库

Docker Hub 仓库使用,及搭建 Docker Registry

目前 Docker 官方维护了一个公共仓库 Docker Hub,其中已经包括了数量超过 15,000 的镜像。大部分需求都可以通过在 Docker Hub 中...

57050
来自专栏LemonLu的专栏

如何编写优秀的Dockerfile?

我已经使用 Docker 有一段时间了,其中编写 Dockerfile 是非常重要的一部分工作。在这篇博客中,我打算分享一些建议,帮助大家编写更好的 Docke...

72450
来自专栏有困难要上,没有困难创造困难也要上!

Docker使用Swarm组建集群Docker使用Swarm组建集群

41980
来自专栏姚俊刚的专栏

在腾讯云服务器上体验 Docker

在腾讯云的 ubuntu 服务器上安装和运行 Docker,Docker可以解决虚拟机能够解决的问题,同时也能够解决虚拟机由于资源要求过高而无法解决的问题。

7.5K20
来自专栏纯洁的微笑

Docker(五):Docker 三剑客之 Docker Machine

上篇文章Docker(四):Docker 三剑客之 Docker Compose 介绍了 Docker Compose,这篇文章我们来了解 Docker Mac...

48090
来自专栏编程坑太多

『中级篇』Dockerfile详解(17)

PS:Dockerfile详解基本就介绍这么多,可能还有很多命令没有讲解,以后用到了在说吧。一定要CMD和ENTRTYPOINT因为很多官方的都常用这两个命令。

19650
来自专栏大数据架构师专家

docker系列-运行nginx静态网站

nginx 是一个web服务器,需要持久运行的服务器,而且我们一般选择在后台运行.

17620
来自专栏编程坑太多

『中级篇』Dockerfile详解(17)

PS:Dockerfile详解基本就介绍这么多,可能还有很多命令没有讲解,以后用到了在说吧。一定要CMD和ENTRTYPOINT因为很多官方的都常用这两个命令。

14840

扫码关注云+社区

领取腾讯云代金券