如何使用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 条评论
登录 后参与评论

相关文章

来自专栏散尽浮华

Linux系统批量化安装部署之Cobbler

说明: Cobbler服务器系统:CentOS 5.10 64位 IP地址:192.168.21.128 需要安装部署的Linux系统: eth0(第一块网卡,...

1858
来自专栏linux运维学习

linux学习第一篇:网络配置

1.      先使用dhclient获取ip 再使用命令ip addr查看获取到的ip ? 2.      设置静态IP 编辑网卡配置文件,路径: ? ? 3...

1828
来自专栏会跳舞的机器人

Nginx+Tomcat实现负载均衡

在103和117上分别部署相同的Tomcat程序,修改index.jsp页面,把内容改为各自的IP地址。

883
来自专栏散尽浮华

由索引节点(inode)爆满引发的问题

关于磁盘空间中索引节点爆满的问题还是挺多的,借此跟大家分享一下: 一、发现问题 在公司一台配置较低的Linux服务器(内存、硬盘比较小)的/data分区内创建...

2108
来自专栏北京马哥教育

这8种命令都不会,还算什么Linux运维!

01 查看系统内核版本 显示了系统名称(CentOS)和内核版本(release 6.5) The file /etc/issue is a text file...

3447
来自专栏bboysoul

使用docker搭建zabbix

再次之前我们要知道zabbix的主要架构是怎样的,zabbix有一个server端是最主要的,主要是用来收集agent传来的数据然后进行处理等一系列操作,当然有...

943
来自专栏SDNLAB

“访问限制”&“代理访问”实验

前言: 第三届SDN创新大赛又悄悄临近了,第二届大赛时做的题目积压在电脑里实在可惜,因此简单整理,拿出来和大家分享,从代码到实验过程,比较详尽,可以供初学者参考...

33810
来自专栏java达人

linux(centos) 项目部署阶段相关命令汇总

1、ssh免密码登陆 主要命令 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys-->添加公钥 service s...

1948
来自专栏大魏分享(微信公众号:david-share)

干货来袭:OpenShift 3.11.16离线安装手册

本文描述离线安装OCP3.11.16的过程。有订阅的读者,可以自行去access.redhat.com下载。需要进行功能验证的读者,请联系对应的红帽销售进行洽谈...

792
来自专栏企鹅号快讯

写在2018第一天:编程之路始于Git

git是目前世界上使用最广泛的分布式版本控制系统,由大名鼎鼎的Linus花了两周时间写成,同时在2008年使用给git作为唯一版本库格式托管平台gitHub网站...

1795

扫码关注云+社区