docker的入门之旅

序言


从docker的出现以来,它就成为了互联网公司的宠儿。换句话说现在牛逼的互联网公司的架构系统不使用在 Docker之上都不好意思说自己是一个纯粹的互联网公司。

本文章会带领大家了解 Docker 的基础概念,使用方式和一些使用docker的场景。

什么是docker?


或许很多同学都玩过例如这些大名鼎鼎的东西,如:Oracle VM VirtualBox,VMware Workstation。大家都会说这不就是虚拟机嘛,是的,这些都是业界大牛公司搞出来虚拟化技术。用过的同学都说,这docker和它们都没什么区别,感觉都是虚拟机。虽然在一定程度上它们的确很类似,但我们不能把docker当作是虚拟机,怎么说呢。因为从docker的出现到现在,docker肯定是比传统的虚拟机技术是更加强大的。首先,docker不与传统的虚拟机技术一样,它不是在你的宿主机上使用你的硬件进行虚拟出另外一个机子。但是docker是宿主机中的一个进程而已,它把它自身的网络 io都隔离成单独一个房间(如同一栋楼,楼为进程,里面的房间都是docker它自身的玩意进行隔离)。这样一来那么和虚拟化相比性能就高了不少,并且它能够开启的数量也足够的多。

安装


docker安装还是比较简单的,在不同的环境下有不同的脚本。但是我们具体的操作还是遵循官网的安装文档进行安装。

本文使用的macos进行安装,具体可以参考docker对应的官方文档。文档地址:  https://docs.docker.com/docker-for-mac/install/#install-and-run-docker-for-mac

以macos为例子:

安装完成后进行对应的终端验证

三大核心概念

image:

 image俗称镜像,是docker可分层并且可复用的,类似于一个git仓库。

container:

container俗称容器,是image镜像的载体,等同于楼中的房间。具有自己的进程,文件等等。

repository:

repository俗称仓库,总体来说它比较相似于git仓库,它的作用就是将docker容器进行构建并且打包成一个镜像进行分发,其他的人可以使用该镜像进行自己环境。

docker命令

1. 查询对应的仓库是否有包

``` 

docker search 包名

```

例如我们需要安装nginx包,我们可以使用搜索命令查看使用量最多的包

2. 进行对应的镜像下载

``` docker pull 包名 ```

例如我们需要安装hello-world包,我们可以使用搜索命令查看使用量最多的包,并且使用下载命令进行下载。

进行下载排名第一的包

3. 如何查看本地有哪些下载好的镜像

``` docker images ```

4. 删除一个不需要的镜像

``` docker rmi 镜像名字 ```

5.创建一个docker container,返回对应的container_id(也就是容器的标示)

``` docker create --name 容器名字 下载好的镜像名字 ```


6. 启动一个docker container

``` docker start 对应的container_name ```

7. 查询运行中的容器

``` docker ps ```

8. 进入容器

``` docker exec -it 容器名字或则是container_id /bin/bash ```

9. run命令,run命令是create exec start的结合体

``` docker run --name 容器名字 镜像名字 /bin/bash ```

10. 停止一个container

``` docker stop container_id ```

11. 删除一个容器

```docker container rm container_id ```

12. 强制干掉一个container

```docker container kill 容器名字或则id ```

13. 查询一个容器的日志

```docker container logs container_id```

14. 构建一个镜像

```docker commit --author"作者名字"--message"描叙信息"启动的container_id 镜像名字```

15. 推送到远程

```docker login // 输入帐号密码后,没有需要注册一个docker push images中的名字docker logout // 登出 ```

DockerFile

你可以选择使用基础镜像一步步的构建,也可以选择写一个配置文件,然后一条命令(docker build)完成构建,显然配置文件的方式可以更好地应对需求的变更,这个配置文件就是Dockerfile。

整个要求必须是使用开头 FROM 镜像名字 指定镜像是什么。

基本上指令很类似于linux的命令,具体我们编写的时候还是需要参考以下官网文档的。

https://docs.docker.com/engine/reference/builder/#environment-replacement

现在我们使用dockerfile去构建一个nginx,并且在根下面创建文件夹和文件并且写入hello world

``` FROM nginx​ 

RUN mkdir test_dir \&& cd test_dir \&& touch hello.txt \&& echo "hello world" > hello.txt ```

docker-compose.yaml 配置文件构建环境

相对dockerfile而言docker-compose等同于是写配置文件,并且我们需要对应某个镜像单独做一些如创建目录 下载扩展等等可以使用dockerfile进行辅助构建。基本上docker-compose的配置很多参数都是相当于命令中某些选项。相对而言,我还是比较喜欢用这种方式去搭建环境。

我们接下来会使用docker-compose来搭建php环境。

创建文件docker-compose.yml,代码如下:

``` version: '2'​

services:nginx:restart:alwayscontainer_name:my_nginx    # 镜像image:nginx    # 将nginx链接到php-fpmlinks:-phpfpm    # 端口内部80映射80ports:-80:80networks:-code-network    # 配置nginx配置映射和项目映射volumes:-./index.html:/usr/share/nginx/html/test/index.html:rw-./index.php:/usr/share/nginx/html/test/index.php:rw      # 项目配置vhost-./nginx/conf/vhost/default.conf:/etc/nginx/conf.d/default.conf:rw    # command: nginx关闭守护进程command:nginx -g "daemon off;"tty:true​phpfpm:container_name:my_php    # docker安装插件 https://docs.docker.com/samples/library/php/build:./php/networks:-code-networkvolumes:-./index.html:/var/www/html/test/index.html:rw-./index.php:/var/www/html/test/index.php:rwlinks:-mysql-composer​mysql:image:mysql:5.6restart:alwaysports:-"3306:3306"command:mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci --init-connect='SET NAMES utf8mb4;'    # 环境变量 https://docs.docker.com/samples/library/mysql/environment:MYSQL_USER:rootMYSQL_ROOT_PASSWORD:ZeIH8QHbdAT6n6uNgaDwmmjG799IZFbhnetworks:-code-network​composer:image:composer​networks:code-network:​

nginx.conf

server{listen80;server_namelocalhost;​root/usr/share/nginx/html;indexindex.html index.htm index.php;​location/ {​    }​location~ ^(.+\.php)(.*)${root/usr/share/nginx/html/test;fastcgi_indexindex.php;fastcgi_passphpfpm:9000;# 修改为phpfpm容器fastcgi_paramSCRIPT_FILENAME  /var/www/html/test$fastcgi_script_name;​# 加入path_info环境变量fastcgi_split_path_info ^(.+\.php)(.*)$;fastcgi_paramPATH_INFO$fastcgi_path_info;fastcgi_paramPATH_TRANSLATED$document_root$fastcgi_path_info;​if(!-e$document_root$fastcgi_script_name) {# 此处直接返回404错误return404;        }​includefastcgi_params;    }}

php插件dockerfile

FROMphp:7.3-fpm​RUNphp -m​RUNdocker-php-ext-install pdo_mysqlRUNdocker-php-ext-install opcache​# redisRUNpecl install -o -f redis \&&  rm -rf /tmp/pear \&&  docker-php-ext-enable redis​

如何启动,在对应的文件下面 ,-d表示后台运行

docker-compose up -d

如何退出

docker-compose stop

如何重启

docker-compose restart

更多命令可以使用--help进行查看

查看效果:

总结

相对来说,docker的使用对软件的开发,或者部署等等之类的都带来了极大的便利,虽然说只是一个入门的探究。

以上的示例代码是作为一个学习参考,请不要直接使用到任何项目环境中,以上说明纯属个人的理解。如果你需要深入学习docker,我的建议还是需要从官方的详细文档进来览阅。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 207,113评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,644评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,340评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,449评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,445评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,166评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,442评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,105评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,601评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,066评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,161评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,792评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,351评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,352评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,584评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,618评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,916评论 2 344

推荐阅读更多精彩内容