Docker之初识(一)

1、简介

  今年四月份公司逐步改用docker容器来部署应用,当时自己刚踏出学校大门,平时开发都是环境都是早已安装好,因此一直没怎么了解Docker这玩意。公司里各位开发大佬说这是个好东西,可以很方便的部署迁移一个应用,当时自己一脸懵逼。通过这几个月的学习与使用,自己也逐步了解了Docker,因此抽出空余时间来写一写docker的知识总结与大家分享。

Docker的官方简介:

  Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。

  Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

  容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

我的个人理解就是:

  每一个Docker容器相当于一个完全封闭的(虚拟)盒子,默认状态下的盒子与盒子之间是不能够进行通讯,并且都寄存在宿主机上面。若要使盒子与盒子、盒子与宿主机之间进行通讯需要人为去设置,给他开辟一条通信通道。

  Doker的应用场景有很多,最常见的就是Web应用的自动化打包和发布、自动化测试和持续集成发布、方便部署分布式应用等,而我司的Web应用就是结合Docker进行自动化打包和发布。

2、Docker使用

  2.1、docker安装  

  docker支持Windows、MacOS、Linux等系统,安装过程我这里就不介绍了,在网上有很多资源。

  安装后进入命令行执行docker命令来判断docker是安装成功。

  看到有Options输出则表示安装成功。

  2.2、我们平时安装软件的第一步是做什么咧?

  每当我们安装软件的第一步是做什么呢?毫无疑问,那就是search查找安装包啦!

  那么docker中的查找"安装包"的命令是什么呢?

  很简单,那就是docker search 软件名;

docker search nginx;    // 查找nginx

  执行该命令后,将会出现一系列的搜索结果。

  2.3、找到软件后那就下载软件啦

  docker中与我们平常下载软件这一动作相对应的命令就是:docker pull 软件名;(但平时我们把这一动作叫做拉取镜像)

docker pull nginx;  // 拉取nginx的镜像

执行命令后将会开始拉取nginx镜像

拉取成功我们使用docker images;命令可以查看已经拉取的镜像列表。

docker images;    // 查看已拉取的镜像列表

  2.4、软件已经下载好了下一步又是做什么咧

  docker中于普通软件安装相对应的命令是docker run 软件名;(我们把这一动作称为:从该镜像中创建容器)

  在创建容器的时候,我们一般还会添加一些其他参数,以便更好的管理使用应用。

  在此之前我们需要先建立两个文件目录,www和nginx/conf.d,并在nginx中新建一个defalut.conf配置文件

mkdir www;
mkdir -p nginx/conf.d
vi nginx/conf.d/default.conf    // default.conf文件内容在下面
docker run -p 8080:80 -d -v $PWD/www:/usr/share/nginx/html -v $PWD/nginx/conf.d:/etc/nginx/conf.d  --name mynginx  nginx
# -p 指定绑定端口(端口映射,将容器中的80端口绑定到主机中的8080端口)
# -v 将主机中的当前www目录挂载到容器中的/usr/share/nginx/html目录中
# -d 让容器在后台运行
#defalut.conf文件
server {
listen  80 default_server;
server_name _;
  root   /usr/share/nginx/html;
  location / {   index index.html index.htm index.php;
  autoindex off;
  }
          location ~ \.php(.*)$ {
          root   /var/www/html/;
          fastcgi_pass 172.17.0.2:9000;
          fastcgi_index index.php;
          fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
          fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
          fastcgi_param PATH_INFO $fastcgi_path_info;
          fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
          include  fastcgi_params;
  }
 }

创建容器后我们可以通过docker ps查看正在运行的容器。

  2.5、检测运行的容器应用是否能够正常工作

   因为我们在创建容器的时候已经将当前目录下的www目录映射到容器中nginx的/usr/share/nginx/html工作根目录,因此我们在当前www目录下新增一个index.html文件

# 在www目录下新建index.html文件,并任意写一些字符串
vi index.html

   由于Windows系统中的docker是通过一个VM虚拟机为桥梁搭建的,我们在docker中创建容器时所映射出来的ip端口是指向虚拟机的,因此我们需要通过虚拟机的ip和端口进行访问容器。(注:Windows系统相对比较特殊需要借助VM实现,而MacOS和Linux则不需要,因此容器所关联的端口是宿主机127.0.0.1的)

查看该VM的ip:

在ip在运行docker的时候所展示出来的ip

在浏览器中访问192.168.99.100:8080

3、总结

   使用docker搭建一个小demo还比较简单的,只需要几个命令即可,但是我们还是需要好好了解镜像、容器、宿主机他们三者的关系,思考他们是如何通信,如何使用docker构建一个完整的应用环境等。

在这篇博客中主要涉及到的一些命令有:

docker search **
docker pull **
docker run -p 8080:80 -d -v $PWD/www:/usr/share/nginx/html -v $PWD/nginx/conf.d:/etc/nginx/conf.d  --name mynginx  nginx
docker ps

(以上是自己的一些见解,若有不足或者错误的地方请各位指出)

 作者:那一叶随风

 声明:本博客文章为原创,只代表本人在工作学习中某一时间内总结的观点或结论。转载时请在文章页面明显位置给出原文链接

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏coder修行路

Docker入门简介

Docker的概念 什么是Docker? Docker是一个开源平台,包含:容器引擎和Docker Hub注册服务器 Docker容器引擎:可以将开发者打包他们...

211100
来自专栏编程坑太多

『中级篇』什么是Container(15)

233100
来自专栏jessetalks

Gitlab CI 自动部署 asp.net core web api 到Docker容器

为什么要写这个? 在一个系统长大的过程中会经历不断重构升级来满足商业的需求,而一个严谨的商业系统需要高效、稳定、可扩展,有时候还不得不考虑成本的问题。我希望能找...

60760

将Coolstore微服务引入服务网格:第1部分 - 探索自动注入

随着业界走向云端原生微服务的幻灭之谷,我们最终明白分布式架构会带来更多的复杂性(奇怪吧?),服务网格可以帮助软化着陆,将一些复杂性从我们的应用程序中移出,并将它...

15850
来自专栏一个会写诗的程序员的博客

十分钟带你理解Kubernetes核心概念

本文将会简单介绍Kubernetes的核心概念。因为这些定义可以在Kubernetes的文档中找到,所以文章也会避免用大段的枯燥的文字介绍。相反,我们会使用一些...

13130
来自专栏编程坑太多

『中级篇』 Docker Bridge详解(26)

12430
来自专栏jeremy的技术点滴

尝试docker的overlay网络

43250
来自专栏Django Scrapy

Ubuntu安装Anaconda3

1.2K70
来自专栏JadePeng的技术博客

google gcr.io、k8s.gcr.io 国内镜像

https://github.com/anjia0532/gcr.io_mirror

2.9K30
来自专栏编程坑太多

『中级篇』 Docker Bridge详解(26)

19240

扫码关注云+社区

领取腾讯云代金券