欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Docker入门教程

程序员文章站 2022-06-03 13:18:33
...

遇见Docker容器


学校期间接触到容器的概念,但一直未曾真正实践,看到名字就感觉望而生畏,在实习阶段真正接触到Docker容器的使用,惊叹于这一神来之笔!!太有用了!!

相信程序员经常遇到如下场景:

测试员小A:Monkey,程序在我机器上运行不了....
程序员:在我机器上正常啊....
.......无限撕逼中.......
.......无限找BUG中....

上述场景,尤其C++ Monkey应该是习以为常,由于链接库、依赖等等版本不兼容问题,经常出现在我机器上运行好好的的声音。咦??有没有一种方式,我在提交代码时候,可以将我开发环境的链接库、依赖等等一并提交,保持开发和测试环境各个库的版本一致呢?

Docker:我可以!!! I can!!! 私はできる!!!! 할 수 있다,...

当然上述应用是Docker容器应用场景的一种。

初识Docker

简介

Docker是一个开源的应用容器引擎,翻译成中文为码头工人。
Docker入门教程
Docker入门教程

如图,Docker容器形如集装箱,其实软件、环境、依赖包的集合,容器和容器之间相互隔离。

核心概念

  • 镜像(Image)
    镜像即是副本,是容器的静态文件存储形式,通过命令docker run运行镜像即得到运行的docker容器,其定义类似windows ghost。
    通过同一个镜像可以创建完全相同的docker容器。
    镜像存储在仓库中,代码交付(程序及运行环境)即是镜像的交付。
  • 容器
    镜像通过命令运行后即是容器实例。镜像与容器关系类比与代码与程序。代码是程序的静态形式,代码执行即获得程序,程序是代码的动态形式。
  • 仓库
    仓库即是存储镜像的地方,类似于git仓库,分为本地仓库和远程仓库,通过命令docker pulldocker push可以拉取或者推送镜像文件。

初试Docker

目标

基于Linux系统,Docker内编写shell脚本文件,Docker容器启动后执行该脚本文件在控制台输入hello world!。并将上述制作成镜像。

步骤

1.安装Docker环境

此处不再叙述,首先在Linux系统部署docker环境,通过yum install docker.
安装完成通过docker version验证是否安装成功。显示如下则表示成功

Client:
 Version:      1.10.3
 API version:  1.22
 Go version:   go1.5.3
 Git commit:   20f81dd
 Built:        Thu Mar 10 21:49:11 2016
 OS/Arch:      linux/amd64

Server:
 Version:      1.10.3
 API version:  1.22
 Go version:   go1.5.3
 Git commit:   20f81dd
 Built:        Thu Mar 10 21:49:11 2016
 OS/Arch:      linux/amd64

2.拉取标准镜像

首先拉取标准镜像,本文基于Linux环境部署tomcat服务器,因此拉取centos标准镜像。命令:

docker pull centos

3.运行该镜像获得docker容器实例

  • 查看下载的docker 镜像ID

docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 49f7960eb7e4 2 weeks ago 199.7 MB

  • 运行镜像获取Docker容器实例

docker run -i -t -d 49f7960eb7e4 /bin/bash

运行上述命令(49f7960eb7e4是IMAGE ID,按照自己机器的ID输入,不可照抄)进入运行并进入docker实例中。

  • -i以交互方式运行
  • -t docker容器运行后进入终端命令行
  • -d以后台进程方式运行docker容器,这样在退出容器后其容器并没有退出。

4.进入docker容器

在运行上述命令后,控制台输入一串字符串00d0ccf4aebaff1246ced1197264bb15fb80125bcac6156c754772f61bd16d01,容器已经启动且在后台运行,
通过命令
docker ps可以查看到刚刚运行的容器

docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
00d0ccf4aeba 49f7960eb7e4 “/bin/bash” About a minute ago Up About a minute

通过命令docker exec进入docker容器中

docker exec -it 00d0ccf4aeba /bin/bash

上述命令中00d0ccf4aebadocker ps命令输出的container ID,运行上述命令以后则进入到熟悉的linux命令行界面,下面就可以像操作linux系统一样操作。

5.编写脚本文件

/目录下编写脚本文件,定义为startup.sh

#!/bin/bash
echo “Hello World !”
echo “This is first docker.”

增加可执行权限

chmod a+x startup.sh

6.保存制作的Docker镜像

至此,完成docker镜像制作的准备工作。
通过命令exit退出该docker容器,回到物理机终端。
通过docker ps查看刚刚的docker容器。

注:因为在启动docker容器时候执行docker run -itd通过-d参数使容器后台运行,所以退出时其docker容器仍然在后台运行,如果运行docker run没有加-d参数,当退出时则是真正的退出,上述所做的修改将全部消失。

7.制作镜像

docker commit 00d0ccf4aeba my-image:v1
其中00d0ccf4aeba是container ID
上述指令语义是将容器00d0ccf4aeba重新打包为名称为my-image,标签为v1的新镜像

8.运行新的镜像

再次执行docker images会查看到刚刚制作的镜像my-image:v1
执行命令docker run运行新镜像

docker run -itd 2b6238c926e8 /bin/bash /startup.sh

命令行输出如下:

Hello World !
This is first docker.

至此,完成Docker镜像的制作。将该镜像docker push推到仓库中,然后再任何一台机器通过docker pull即可运行该容器。

常用指令

  • 运行镜像

docker run -i [image-id ]

  • 运行镜像+脚本

docker run -i -t [image-name] [script-name]

  • 后台运行镜像+脚本

docker run -i -t [image-name] [script-name]

  • 显示运行的Docker容器

docker ps

  • 进入容器内

docker exec -it [docker-id] /bin/bash

  • 宿主机器与docker之间复制文件

docker cp host_path containerID:container_path