一、Docker Toolbox
Docker本身需要在Linux上运行,所以想要在windows和mac系统下运行,你需要安装一些软件。Docker Toolbox就是一个软件包,可以登陆官网下载系统对应版本。
安装完成以后会有两个使用docker的工具:一个是命令行,一个是图形界面。
打开Docker Quickstart Terminal工具,默认会创建一个default的虚拟机:
二、Image
在Docker Hub网站上面,可以找到别人做好的一些镜像,有提供基础环境的镜像如,Ubuntu,Centos等等,也有一些安装了软件的镜像。
使用docker命令下载所需镜像到本地电脑上,不过当你不确定你要下载的镜像的名字可以先去搜索一下,比如你要搜索跟Centos相关的镜像:
搜索镜像
docker search centos
官方提供的镜像一般没有前缀,就像第一个centos。
下载镜像
比如要下载cenos镜像
docker pull centos
使用docker官网提供的registry tree可能会有点慢,可以选择使用国内提供的一些镜像服务,比如阿里云提供的服务,这样会快很多。
查看镜像
下载完成以后,查看已下载镜像可以输入:
docker images
三、container
创建容器
有了镜像,就可以运行镜像去创建容器。比如:
docker run centos /bin/echo 'hello'
docker run
后面跟的是镜像名字,接着是你希望在创建容器中运行的命令,上面运行的是使用echo
命令输入hello
。
查看容器
docker ps
没有容器,原因是刚运行的容器执行完命令后就退出了。可以通过加上--all
的选项查看所以容器:
CONTAINER ID
表示容器的id,IMAGE
表示使用的镜像,COMMNAND
表示运行的命令,CREATED
表示容器创建的时间,STATUS
表示容器状态,NAME
表示容器的名字,如果不手动指定,会默认生成一个名字。
我们可以基于同一个镜像创建不同的容器:
删除容器
docker rm CONTAINER ID
指定容器名
创建容器时可以使用--name
的选项指定容器名字,方便后续对该容器的操作:
查看容器日志
docker logs CONTAINER NAME
停止容器
docker stop CONTAINER NAME
重启容器
docker restart CONTAINER NAME
启动容器
docker start CONTAINER NAME
每运行一次容器都会输出一个hello,所以最后的log里有三个hello。
创建带互动的容器
docker run -i -t centos /bin/bash
-i
或者--interactive
选项表示创建一个带交互的容器
-t
或者--tty
选项表示给容器附加一个终端
/bin/bash
表示终端的位置
执行命令后你会看到你已经进入到容器里面了,容器的主机名就是容器的id,在里面可以执行命令,安装应用等等。
四、创建镜像
手工创建
docker commit -m '提交日志' -a '作者' 容器ID 镜像名:容器标签
比如在容器里安装了nodejs的应用,想要保存修改,作为镜像使用。可以执行
docker commit -m '安装 nodejs' -a 'beckjiang' b5f1e430c603 beckjiang/nodejs-demo:latest
使用Dockerfile创建
使用dockerfile创建会更灵活一些。比如还是创建一个安装有nodejs应用的镜像,
先创建目录,进入目录,编辑dockerfile:
进入nodejs-demo目录下后,创建Dockerfile文件,编辑文件:
FROM centos
MAINTAINER beckjiang
RUN curl --silent --location https://rpm.nodesource.com/setup_6.x | bash -
RUN yum install nodejs -y
一个最基本的Dockerfile就这样写好了,接着就是用这个Dockerfile创建镜像。回到命令行,当前所在位置为nodejs-demo里面,运行命令:
docker build --tag beckjiang/nodejs-demo:latest .
--tag
表示镜像的名字以及tag;
.
表示当前目录下去寻找Dockerfile
推送镜像到Docker hub
Docker hub是一个保存镜像的地方,可以登陆网站注册账号,注册完成后,可以在命令行登陆并把自己创见的镜像推送到Docker hub上面。
登陆Docker hub
docker login
随后输入帐号,密码。
推送镜像
登陆成功后,可以把镜像推送上去
docker push beckjiang/nodejs-demo
docker只会把有变化的部分上传上去。