1.docker架构
2.docker镜像
3.DIY一个Base Image
3.1创建一个C程序
[root@VM_0_5_centos hello-world]# vi hello.c
#include<stdio.h>
int main()
{
printf("hello docker\n");
}
3.2编辑一个DockerFile
[root@VM_0_5_centos hello-world]# vi Dockerfile
FROM scratch
ADD a.out /
CMD ["/a.out"]
FROM表示我们从一个IMAGE之上在构建一个IMAGE,我们这里要创建的是BASE IMAGE,所以使用scratch。接下来我们把a.out放到根目录中去。CMD表示command,执行这个a.out。
3.3构建一个image
docker build -t mikezzmeric/zzmhello .
mikezzmeric是docker hub的id,zzmhello是image的名字。.表示在当前目录找这个DockerFile
3.4看看image
[root@VM_0_5_centos hello-world]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
mikezzmeric/zzmhello latest 5bd84d2ccf89 10 seconds ago 865kB
<none> <none> 1b59162f99e5 14 minutes ago 865kB
ubuntu latest 775349758637 6 days ago 64.2MB
redis latest de25a81a5a0b 3 weeks ago 98.2MB
ubuntu 14.04 2c5e00d77a67 5 months ago 188MB
hello-world latest fce289e99eb9 10 months ago 1.84kB
[root@VM_0_5_centos hello-world]# docker history 5bd84d2ccf89
IMAGE CREATED CREATED BY SIZE COMMENT
5bd84d2ccf89 23 seconds ago /bin/sh -c #(nop) CMD ["/a.out"] 0B
686c93892c23 15 minutes ago /bin/sh -c #(nop) ADD file:34fc852f9c01fd251… 865kB
[root@VM_0_5_centos hello-world]#
3.5执行镜像
[root@VM_0_5_centos hello-world]# docker run mikezzmeric/zzmhello
hello docker
3.6删除镜像
docker image rm image的id 或者 docker rmi image的id
4.认识Container
4.1查看当前本地正在运行的容器
docker container ls
4.2查看正在运行和已退出的容器
docker container ls -a 或者 使用docker ps -a
4.3删除container
docker container rm 指定id 或者 docker rm 指定id
4.4查看所有container的id
docker container ls -aq 或者 docker container ls -a | awk {'print$1'}
4.5删除所有container
docker rm $(docker container ls -aq)
4.6查看所有已经退出的容器的ID
docker container ls -f "status=exited" -q
5.构建docker镜像
docker container commit(可以简写为docker commit)
docker image build (可以简写为docker build)
6.Dockerfile语法梳理
6.1 FROM
一个原则:尽量使用官方的image作为base image
6.2 LABEL
定义image的metadataMetaData不可少,类似于代码中的注释
6.3 RUN
在安装软件的时候经常使用RUN每执行一次RUN就是一个新的分层
6.4 WORKDIR
设定当前工作目录,类似于Linux中的cd命令尽量使用WORKDIR,而不是要使用RUN cd,尽量使用绝对目录
6.5 ADD and copy
把本地的文件放到image中去
6.6 ENV
尽量使用ENV增加可维护性
6.7 RUN vs CMD vs ENTRYPOINT
6.7.1 CMD
前者输出hello Docker 后者不会6.7.2 ENTRYPOINT
7 镜像的发布
7.1 登录
[root@VM_0_5_centos docker]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: mikezzmeric
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
7.2发布
[root@VM_0_5_centos docker]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
mikezzmeric1/zzm-entrypoint latest bf34cf7b2e14 30 minutes ago 220MB
mikezzmeric/zzmhello latest 5bd84d2ccf89 2 days ago 865kB
redis latest de25a81a5a0b 3 weeks ago 98.2MB
centos latest 0f3e07c0138f 5 weeks ago 220MB
ubuntu 14.04 2c5e00d77a67 5 months ago 188MB
hello-world latest fce289e99eb9 10 months ago 1.84kB
[root@VM_0_5_centos docker]# docker push mikezzmeric/zzmhello:latest
The push refers to repository [docker.io/mikezzmeric/zzmhello]
11a9b96284a9: Pushed
latest: digest: sha256:a28fbf1671d8f42b6956951645f5fd91947ba54dd5e81c6d44ee6cc547c316d7 size: 527
查看页面
7.3拉取docker
[root@VM_0_5_centos docker]# docker pull mikezzmeric/zzmhello
Using default tag: latest
latest: Pulling from mikezzmeric/zzmhello
525184e594e6: Pull complete
Digest: sha256:a28fbf1671d8f42b6956951645f5fd91947ba54dd5e81c6d44ee6cc547c316d7
Status: Downloaded newer image for mikezzmeric/zzmhello:latest
docker.io/mikezzmeric/zzmhello:latest
7.4 搭建一个私有registry
docker run -d -p 5000:5000 --restart always --name registry registry:2
详情可以参考https://hub.docker.com/_/registry
这样我们的镜像就是往我们自己的服务器上去放,而不是放到docker hub上面啦
8 Docker File实战
8.1 创建一个app.py文件
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "hello docker"
if __name__ == '__main__':
app.run(host="0.0.0.0", port=5000)
8.2 创建Dockerfile
FROM python:2.7
LABEL maintainer="zhouzm"
RUN pip install flask
COPY app.py /app/
WORKDIR /app
EXPOSE 5000
CMD ["python", "app.py"]
8.3 构建image
docker build -t mikezzmeric/flask-hello-demo .
8.4 运行
docker run -d mikezzmeric/flask-hello-demo
8.5 与运行中的容器进行交互
docker exec -it 容器id /bin/bash
我们的容器里面也装好了python,所以交互命令也可以用以下方式输入:
docker exec -it dd9ac31eacc955786fc8152fa891a8cfc5448a1db056483c9306de470279fbe2 python
查看容器的IP地址
docker exec -it dd9ac31eacc955786fc8152fa891a8cfc5448a1db056483c9306de470279fbe2 ip a
8.6停掉正在运行的容器
docker stop containerId
8.7 用特定的名字启动和关闭容器
[root@VM_0_5_centos flask-hello-world]# docker run -d --name zzm mikezzmeric/flask-hello-demo
7a116d84b245714405f7eb45557ab6969894d0be5515c72fe527c8035b4a2bda
[root@VM_0_5_centos flask-hello-world]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7a116d84b245 mikezzmeric/flask-hello-demo "python app.py" 2 seconds ago Up 2 seconds 5000/tcp zzm
[root@VM_0_5_centos flask-hello-world]# docker stop zzm
zzm
[root@VM_0_5_centos flask-hello-world]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7a116d84b245 mikezzmeric/flask-hello-demo "python app.py" 42 seconds ago Exited (137) 23 seconds ago zzm
[root@VM_0_5_centos flask-hello-world]# docker start zzm
zzm
[root@VM_0_5_centos flask-hello-world]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7a116d84b245 mikezzmeric/flask-hello-demo "python app.py" 51 seconds ago Up 3 seconds 5000/tcp zzm
8.8 显示容器的详细信息
docker inspect 容器id或者名称
8.9查看容器运行时的一些日志
[root@VM_0_5_centos flask-hello-world]# docker logs zzm
网友评论