初学docker
初识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运行进行的流程
从docker拉取镜像:从docker远程仓库拉取一个镜像到本地,NANEM必须填写,表示我们拉取的镜像的名字,如果不指定tag,则默认是latest。
1 | docker pull [OPTIONS] NAME[:TAG] |
查看本地镜像
1 | docker images [OPTIONS] [REPOSITORY][:TAG] |
运行镜像:IMAGE是镜像名字。
1 | docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...] |
查看正在运行的容器
1 | docker ps |
进入容器内部
1 | docker exex [OPTIONS] CONTAINER COMMAND [ARG...] |
docker的网络
网络安全也是docker的隔离性的一部分。linux使用namespace进行资源的隔离,比如pid namespace隔离进程,network namespace是隔离网络的。
- docker的网络类型:bridge、host、none。
- 端口映射:容器内的端口和宿主机器的端口映射。
docker的网络模式:
运行Nginx
拉取并运行,-d参数是开启一个守护进程,-p参数做端口映射。
1 | docker pull hub.c.163.com/library/nginx:latest |
进入Nginx容器内部,参数i即使没有attached保证输入有效,参数t是分配一个伪终端,进入容器内部之后,其操作类似Linux。
1 | docker exec -it my-nginx bash # my-nginx是容器启动的时候的name参数,也可是images ID,甚至是镜像名。 |
制作镜像
- 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 | from hub.c.163.com/library/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 | docker pull hub.c.163.com/library/mysql:latest |
关于docker MySQL的相关参数可以参见蜂巢library /mysql。