制作镜像
1. 写Dockerfile文件
2. 命令:docker build -t 目标镜像名 .
// -t: 指定要创建的目标镜像名
// . : Dockerfile 文件所在目录,可以指定Dockerfile的绝对路径。
3. 启动镜像:sudo docker run --rm -p 8081:8081 localhub:5000/cwi_activity:v0.1
4. docker push 镜像名
1. Docker是一个开源的应用容器引擎
2. Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,
然后发布到任何流行的Linux机器上,也可以实现虚拟化。
3. 容器是完全使用沙箱机制,相互之间不会有任何接口(类似iPhone的app),
更重要的是容器性能开销极低。
4. 应用场景
Web应用的自动化打包和发布。
自动化测试和持续集成、发布。
在服务型环境中部署和调整数据库或其他的后台应用。
从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。
5. 在容器内运行一个应用程序()
docker run ubuntu:15.10 /bin/echo "Hello world"
输出 Hello world
各参数解析:
docker: Docker的二进制执行文件
run:与前面的docker组合来运行一个容器。
ubuntu:15.10指定要运行的镜像,Docker首先从本地主机上查找镜像是否存在,
如果不存在,Docker就会从镜像仓库Docker Hub下载公共镜像。
/bin/echo "Hello world":在启动的容器里执行的命令。
以上命令完整的意思可以解释为:
Docker以ubuntu15.10镜像创建一个新容器,
然后在容器里执行bin/echo "Hello world",然后输出结果。
6. 运行交互式的容器()
docker run -i -t ubuntu:15.10 /bin/bash
-t: 在新容器内指定一个伪终端或终端。
-i: 允许你对容器内的标准输入(STDIN)进行交互。
此时已经入一个ubuntu15.10系统的容器
在容器中运行命令
cat/proc/version 查看当前系统的版本信息
ls 查看当前目录下的文件列表。
7. 启动容器(后台模式)
使用以下命令创建一个以进程方式运行的容器
输入指令:docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
输出内容:2b1b7a428627c51ab8810d541d759f072b4fc75487eed05812646b8534a2fe63
(1)这个长字符串叫做容器ID,对每个容器来说都是唯一的。
(2)docker ps 确定容器有在运行
CONTAINER ID:容器ID 2b1b7a428627
NAMES:自动分配的容器名称 amazing_cori
docker logs 2b1b7a428627 查看容器内的标准输出
docker logs amazing_cori 查看容器内的标准输出
各参数解释:
-d: 让容器在后台运行
-P: 将容器内部使用的网络端口映射到我们使用的主机上。
7. 退出容器()
exit或CTRL+D
8. 停止容器()
docker stop 容器ID/容器名
9. Docker镜像使用()
当运行容器时,使用的镜像如果在本地中不存在,docker就会自动从docker镜像仓库中下载,
默认是从Docker Hub公共镜像源下载。
(1)列出镜像列表()
runoob@runoob:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 14.04 90d5884b1ee0 5 days ago 188 MB
php 5.6 f40e9e0f10c8 9 days ago 444.8 MB
nginx latest 6f8d099c3adc 12 days ago 182.7 MB
mysql 5.6 f2e8d6c772c0 3 weeks ago 324.6 MB
httpd latest 02ef73cf1bc0 3 weeks ago 194.4 MB
ubuntu 15.10 4e3b13c8a266 4 weeks ago 136.3 MB
hello-world latest 690ed74de00f 6 months ago 960 B
training/webapp latest 6fae60ef3446 11 months ago 348.8 MB
各个选项说明:
REPOSITORY:表示镜像的仓库源
TAG:镜像的标签
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小
同一仓库源可以有多个TAG,代表这个仓库源的不同个版本
定义不同的镜像:REPOSITORY:TAG
(2)获取一个新的镜像()或拖取镜像()
docker pull 镜像的仓库源:镜像的标签
(3)查找镜像()
doker search 镜像的仓库源的名称
(5)创建镜像()
当我们从docker镜像仓库中下载的镜像不能满足我们的需求时,
我们可以通过以下两种方式对镜像进行更改。
1. 从已经创建的容器中更新镜像,并且提交这个镜像。
2. 使用Dockerfile指令来创建一个新的镜像
(6)更新镜像()
创建容器:docker run -t -i ubuntu:15.10 /bin/bash 进入容器内
在运行的容器内使用apt-get update 命令进行更新
完成操作后,输入exit命令来退出这个容器
通过命令docker commit来提交容器副本
docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2
各个参数说明:
-m:提交的描述信息
-a:指定镜像作者
e218edb10161:容器ID
runoob/ubuntu:v2 : 指定要创建的目标镜像名
(7)构建镜像()
创建一个Dockerfile文件 cat Dockerfile
runoob@runoob:~$ cat Dockerfile
FROM centos:6.7
MAINTAINER Fisher "fisher@sudops.com"
RUN /bin/echo 'root:123456' |chpasswd
RUN useradd runoob
RUN /bin/echo 'runoob:123456' |chpasswd
RUN /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE 22
EXPOSE 80
CMD /usr/sbin/sshd -D
每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写
第一条FROM,指定使用哪个镜像源
RUN指令告诉docker在镜像内执行命令,安装了什么。。。
然后使用Dockerfile文件,通过docker build命令来构建一个镜像。
runoob@runoob:~$ docker build -t runoob/centos:6.7 .
Sending build context to Docker daemon 17.92 kB
Step 1 : FROM centos:6.7
---> d95b5ca17cc3
Step 2 : MAINTAINER Fisher "fisher@sudops.com"
---> Using cache
---> 0c92299c6f03
Step 3 : RUN /bin/echo 'root:123456' |chpasswd
---> Using cache
---> 0397ce2fbd0a
Step 4 : RUN useradd runoob
......
参数说明:
-t: 指定要创建的目标镜像名
. : Dockerfile 文件所在目录,可以指定Dockerfile的绝对路径。
(8)设置镜像标签
runoob@runoob:~$ docker tag 860c279d2fec runoob/centos:dev
docker tag 镜像ID 用户名/镜像源名:新的标签名
runoob@runoob:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
runoob/centos 6.7 860c279d2fec 5 hours ago 190.6 MB
runoob/centos dev 860c279d2fec 5 hours ago 190.6 MB
runoob/ubuntu v2 70bf1840fd7c 22 hours ago 158.5 MB
ubuntu 14.04 90d5884b1ee0 6 days ago 188 MB
10. Docker容器使用
(1)运行一个web应用
docker pull training/webapp //载入镜像
docker run -d -P 5000:5000 training/webapp python app.py
//-d:让容器在后台运行
//-P:将容器内部使用的网络端口映射到我们使用的主机上。
// 容器内部的5000端口映射到我们本地主机的5000端口上。
(2)查看正在运行的容器
docker ps
docker ps -l 查询最后一次创建的容器
(3)docker port 容器ID或容器名
查看指定(ID或者名)容器的某个确定端口映射到宿主机的端口号
输入: docker port 2344fsdfd
输出: 5000/tcp -> 0.0.0.0:5000
(4)查看web应用程序日志
docker logs -f 容器ID或容器名
-f: 让docker logs像使用tail -f 一样来输出容器内部的标准输出。
(5)查看web应用程序容器的进程
docker top 容器ID或容器名
(6)检查web应用程序
查看Docker底层信息,返回一个json文件记录着Docker容器的配置和状态信息
docker inspect 容器ID或容器名
(7)停止web应用容器
docker stop 容器ID或容器名
(8)重启web应用容器
docker start 容器ID或容器名
docker restart 容器ID或容器名 //重启正在运行的容器
(9)移除web应用容器
docker rm 容器ID或容器名
删除容器时,容器必须是停止状态。
常用指令
1. docker run --启动镜像
2. docker pull --拉取镜像
3. docker push --推镜像
4. docker ps --显示运行的容器
5. docker save --保存镜像
6. docker load --加载镜像
7. docker rm --删除镜像
8. docker cp --拷贝数据
9. docker version --显示docker版本信息
10. docker info --显示容器信息
11. docker login --登录镜像仓库
12. docker images --显示镜像信息
13. docker kill --杀死容器相关进程
14. docker export/import --打包、解包
15. docker pause --暂停某一容器的所有进程
16. docker tag --打标签
17. docker logs --查看容器日志