方法一:docker commit
1. 跑一个basic image,docker新建了一个容器
root@ubuntu:/home/thm/docker/test# docker run -i -t tanghuimin0713/ubuntu_amd64:14.04 /bin/bash WARNING: Local (127.0.0.1) DNS resolver found in resolv.conf and containers can't use it. Using default external servers : [8.8.8.8 8.8.4.4] root@5d807872b2ba:/#
2. 在容器内安装apache2
root@5d807872b2ba:/# apt-get update Ign http://archive.ubuntu.com trusty InRelease Hit http://archive.ubuntu.com trusty Release.gpg Hit http://archive.ubuntu.com trusty Release Hit http://archive.ubuntu.com trusty/main i386 Packages Get:1 http://archive.ubuntu.com trusty/main Translation-en [762 kB] Fetched 762 kB in 34s (22.1 kB/s) Reading package lists... Done root@5d807872b2ba:/# root@5d807872b2ba:/# apt-get install apache2 Reading package lists... Done Building dependency tree... Done The following extra packages will be installed: ... ... ...
3. 退出容器,将刚才装了apache的容器创建成一个新的image
root@5d807872b2ba:/# exit exit root@ubuntu:/home/thm/docker/test# root@ubuntu:/home/thm/docker/test# docker ps -l CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5d807872b2ba tanghuimin0713/ubuntu_amd64:14.04 /bin/bash 7 minutes ago Exit 0 nostalgic_heisenberg root@ubuntu:/home/thm/docker/test# docker commit 5d807872b2ba tanghuimin0713/ubuntu_amd64_apache2:14.04 e7df0b3ab526c83098d54e826b4e8e1f2c6efbe0a2511c3b06b79723bacfff52 root@ubuntu:/home/thm/docker/test# docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE tanghuimin0713/ubuntu_amd64_apache2 14.04 e7df0b3ab526 3 seconds ago 248.1 MB scratch latest 6e1aa483880d About an hour ago 0 B tanghuimin0713/ubuntu_amd64 14.04 6cfee0d4349b 4 hours ago 216.8 MB tanghuimin0713/ubuntu_amd64 latest 6cfee0d4349b 4 hours ago 216.8 MB tanghuimin0713/ubuntu_i386 14.04 ee57f53fe012 5 hours ago 216.8 MB tanghuimin0713/ubuntu_i386 latest ee57f53fe012 5 hours ago 216.8 MB ubuntu 14.04 c4ff7513909d 9 days ago 225.4 MB ubuntu trusty c4ff7513909d 9 days ago 225.4 MB ubuntu 14.04.1 c4ff7513909d 9 days ago 225.4 MB ubuntu latest c4ff7513909d 9 days ago 225.4 MB ubuntu 14.10 75204fdb260b 9 days ago 230.1 MB ubuntu utopic 75204fdb260b 9 days ago 230.1 MB ubuntu 12.04 822a01ae9a15 9 days ago 108.1 MB ubuntu 12.04.5 822a01ae9a15 9 days ago 108.1 MB ubuntu precise 822a01ae9a15 9 days ago 108.1 MB ubuntu 12.10 c5881f11ded9 9 weeks ago 172.2 MB ubuntu quantal c5881f11ded9 9 weeks ago 172.2 MB ubuntu 13.04 463ff6be4238 9 weeks ago 169.4 MB ubuntu raring 463ff6be4238 9 weeks ago 169.4 MB ubuntu 13.10 195eb90b5349 9 weeks ago 184.7 MB ubuntu saucy 195eb90b5349 9 weeks ago 184.7 MB jamtur01/puppetmaster latest 99200e07340a 11 weeks ago 312.4 MB ubuntu 10.04 3db9c44f4520 4 months ago 183 MB ubuntu lucid 3db9c44f4520 4 months ago 183 MB root@ubuntu:/home/thm/docker/test#
4. run一下刚刚新创建的image,看看container内是否存在刚刚安装的apache2
root@ubuntu:/home/thm/docker/test# docker run -t -i tanghuimin0713/ubuntu_amd64_apache2:14.04 /bin/bash WARNING: Local (127.0.0.1) DNS resolver found in resolv.conf and containers can't use it. Using default external servers : [8.8.8.8 8.8.4.4] root@081572d422c7:/# root@081572d422c7:/# root@081572d422c7:/# apache apache2 apache2ctl apachectl
5. 将新创建的image同步到docker hub
docker push tanghuimin0713/ubuntu_amd64_apache2
方法二:Dockerfile
1. 在一个空目录下创建Dockerfile,并在Dockerfile中写入如下类似批处理的语句
root@ubuntu:/home/thm/docker/test# touch Dockerfile root@ubuntu:/home/thm/docker/test# vim Dockerfile
1 FROM tanghuimin0713/ubuntu_amd64:14.04 2 RUN apt-get update 3 RUN apt-get install -y nginx 4 RUN echo "Hi, I am in your container" > /usr/share/nginx/html/index.html 5 EXPOSE 80
Dockerfile中相关命令解释:
FROM: 以"tanghuimin0713/ubuntu_amd64:14.04"为basic image运行一个container;
RUN: 在container中执行命令;
EXPOSE: 将镜像的80端口暴露在外,这样容器外可以看到这个端口并与其通信;
2. docker build创建image
root@ubuntu:/home/thm/docker/test# root@ubuntu:/home/thm/docker/test# docker build -t="tanghuimin0713/ubuntu_amd64_nginx:14.04" . Uploading context 2.56 kB Uploading context Step 0 : FROM tanghuimin0713/ubuntu_amd64:14.04 ---> 6cfee0d4349b Step 1 : RUN apt-get update ---> Running in dedead78ac76 Ign http://archive.ubuntu.com trusty InRelease Hit http://archive.ubuntu.com trusty Release.gpg Hit http://archive.ubuntu.com trusty Release Hit http://archive.ubuntu.com trusty/main i386 Packages Get:1 http://archive.ubuntu.com trusty/main Translation-en [762 kB] Fetched 762 kB in 2min 16s (5571 B/s) Reading package lists... ---> 3af4720f8ec3 Step 2 : RUN apt-get install -y nginx ---> Running in e6a4a63286fe Reading package lists... Building dependency tree... The following extra packages will be installed: ... ... ... Processing triggers for libc-bin (2.19-0ubuntu6) ... Processing triggers for sgml-base (1.26+nmu4ubuntu1) ... ---> 409a0d5cd91b Step 3 : RUN echo "Hi, I am in your container" > /usr/share/nginx/html/index.html ---> Running in 783d8789509c ---> 9a5d96a41a0b Step 4 : EXPOSE 80 ---> Running in a2e24fc2d4b9 ---> 6cd5691b7c8c Successfully built 6cd5691b7c8c Removing intermediate container dedead78ac76 Removing intermediate container e6a4a63286fe Removing intermediate container 783d8789509c Removing intermediate container a2e24fc2d4b9 root@ubuntu:/home/thm/docker/test#
3. 查看image是否创建成功
root@ubuntu:/home/thm/docker/test# docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE tanghuimin0713/ubuntu_amd64_nginx 14.04 6cd5691b7c8c 30 seconds ago 259.2 MB scratch latest 6e1aa483880d 2 hours ago 0 B tanghuimin0713/ubuntu_amd64 14.04 6cfee0d4349b 5 hours ago 216.8 MB tanghuimin0713/ubuntu_amd64 latest 6cfee0d4349b 5 hours ago 216.8 MB tanghuimin0713/ubuntu_i386 14.04 ee57f53fe012 6 hours ago 216.8 MB tanghuimin0713/ubuntu_i386 latest ee57f53fe012 6 hours ago 216.8 MB ubuntu 14.04.1 c4ff7513909d 9 days ago 225.4 MB ubuntu 14.04 c4ff7513909d 9 days ago 225.4 MB ubuntu latest c4ff7513909d 9 days ago 225.4 MB ubuntu trusty c4ff7513909d 9 days ago 225.4 MB
4. run一下新创建的image
root@ubuntu:/home/thm/docker/test# docker run -i -t tanghuimin0713/ubuntu_amd64_nginx:14.04 /bin/bash root@45494a615738:/# root@45494a615738:/# which nginx /usr/sbin/nginx
nginx命令是存在的,成功。
5. 将新创建的image同步到docker hub
docker push tanghuimin0713/ubuntu_amd64_nginx:14.04