赞
踩
docker pull ubuntu
docker run -it --name=u1 08d22c0ceb15 /bin/bash
root@178c803d276f:/# apt-get update
root@178c803d276f:/# apt-get install gcc
docker commit -m="add gcc compile tool" -a="zwf" 178c803d276f ubuntu:1.1
此时,ubuntu:1.1版本已经自带gcc工具
(1)编写C程序helloword.c
- #include<stdio.h>
- #include <unistd.h>
-
-
- int main()
- {
- while(1
- {
- printf("Hello World!!!\n");
- sleep(5);
- }
- return 0;
- }
(2)编写Dockerfile
- FROM ubuntu:1.1
-
- RUN mkdir /usr/src/myapp
- COPY helloworld.c /usr/src/myapp
- WORKDIR /usr/src/myapp
-
- RUN gcc helloworld.c -o helloworld
-
- CMD ["./helloworld"]
目录结构:
注意:Dockerfile和helloworld.c都是放在宿主机下的。
docker build -t ubuntu-helloworld . # 注意:命令最后要加一个点
docker inspect ff21d2470987
docker run -it ff21d2470987
注意,后面不能带命令,有命令会被覆盖,不会打印hello world
重新打开一个终端,进入后台:
注意:如果helloworld程序退出,容器也会跟随结束
启动后,helloworld在后台运行,通过docker logs 容器ID查看运行情况
ubuntu基础镜像77.8MB,busybox才4.86MB,优点资源消耗不大。缺点,支持的命令更少。
(1)编写C程序helloword.c
#include<stdio.h>
#include <unistd.h>
int main()
{
while(1
{
printf("Hello World!!!\n");
sleep(5);
}
return 0;
}
(2)编写Dockerfile
FROM busybox:latest
COPY helloworld /
WORKDIR /
CMD ["./helloworld"]
(3)构建自己的镜像
docker build -t busybox-helloworld .
可以看出,基于busybox制作的镜像相比ubuntu,大大减小开销。
运行效果一致:
docker run -it 60345b8bd221
busybox基础镜像中没有支持/bin/bash, 通过sh进入。
Docker中的镜像分层,支持通过扩展现有镜像,创建新的镜像。类似Java继承于一个Base基础类,自己再按需扩展。
新镜像是从 base 镜像一层一层叠加生成的。每安装一个软件,就在现有镜像的基础上增加一层
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。