初识docker

Docker is the world’s leading software containerization platform.
Docker是世界领先的软件容器化平台。

Docker公司开发,开源,托管在GitHub,开源部分现改名为Moby,docker由docker公司商业化。

优点:跨平台、支持Windows、MacOS、Linux。

理解Docker

Docke的logo是一条蓝色的🐳,驮着许许多多的集装箱自由地遨游在茫茫大海,这个logo形象的体现了docker的思想。

  • 集装箱

  • 标准化(运输方式、存储方式、API接口)

  • 隔离

深入docker

docker由三个核心的词汇:镜像、仓库和容器。镜像就是上面所说的集装箱,仓库则是超级码头,容器则是正在运行程序的地方。使用docker运行一个程序的过程就是,去仓库把镜像拉到本地,然后用一条命令把镜像运行起来,变成容器。

  • Build 构建镜像 - 集装箱 - 镜像

  • Ship 运输镜像(从仓库和我们的主机上运输)- 码头 - 仓库

  • Run 运行镜像(运行的镜像就是一个容器) - 运行程序的地方 - 容器

docker仓库

公司 仓库
Docker Hub hub.docker.com
网易蜂巢 c.163.com/hub#/m/home

docker初体验

docker运行进行的流程

docke-image-build-pull-run

从docker拉取镜像:从docker远程仓库拉取一个镜像到本地,NANEM必须填写,表示我们拉取的镜像的名字,如果不指定tag,则默认是latest。

1
2
3
docker pull [OPTIONS] NAME[:TAG]
# docker pull hello-world

查看本地镜像

1
2
docker images [OPTIONS] [REPOSITORY][:TAG]
# docker images

运行镜像:IMAGE是镜像名字。

1
2
docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...]
# docker run hello-world

查看正在运行的容器

1
docker ps

进入容器内部

1
docker exex [OPTIONS] CONTAINER COMMAND [ARG...]

docker的网络

网络安全也是docker的隔离性的一部分。linux使用namespace进行资源的隔离,比如pid namespace隔离进程,network namespace是隔离网络的。

  • docker的网络类型:bridge、host、none。
  • 端口映射:容器内的端口和宿主机器的端口映射。

docker的网络模式:
docker-network-mode

运行Nginx

拉取并运行,-d参数是开启一个守护进程,-p参数做端口映射。

1
2
docker pull hub.c.163.com/library/nginx:latest
docker run --name my-nginx -d -p 8080:80 hub.c.163.com/library/nginx

进入Nginx容器内部,参数i即使没有attached保证输入有效,参数t是分配一个伪终端,进入容器内部之后,其操作类似Linux。

1
2
3
4
docker exec -it my-nginx bash # my-nginx是容器启动的时候的name参数,也可是images ID,甚至是镜像名。
ps -ef # 查看进程

exit #退出容器

制作镜像

  • Dockerfile:就是告诉docker怎么制作镜像。
  • docker build:用来执行Dockerfile描述的每一件事情,最终制作成为一份docker image。

我们制作一个就press(WordPress的Java版本)的镜像,先拉取一份Tomcat镜像作为我们的继承镜像,由于Tomcat需要Java环境,肯定是包含了jdk。

1
docker pull hub.c.163.com/library/tomcat:latest

现在就把hub.c.163.com/library/tomcat作为我们的基础镜像,来开发我们的jpress镜像。

1
2
3
4
5
6
from hub.c.163.com/library/tomcat

MAINTAINER zjw me@zhoujunwen.win

COPY ./jpress-web-newest.war /usr/local/tomcat/webapps/jpress.war # copy的第一个参数是本地的文件路径,第二参数是容器Tomcat的目录,具体可在镜像中心查看使用。

保存该文件为Dockerfile,并退出。
在Dockerfile当前目录执行docker build -t jpress:latest . ,编译我们的jpress镜像。
运行该镜像:docker run --name jpress -d -p 8080:8080 jpress:latest,打开浏览器,访问:http://localhost:8080/jpress,此时,如果出现jpress的安装页面表示正确。

当然jpress需要使用mysql数据库,所以需要拉取mysql镜像并运行方可正确操作。

1
2
docker pull hub.c.163.com/library/mysql:latest
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=jpress hub.c.163.com/library/mysql:latest

关于docker MySQL的相关参数可以参见蜂巢library /mysql