Docker 笔记
Docker 基本概念及基本命令
container (可读写) -> image (只读) -> image ……
docker –version
Docker hub 是官方的镜像社区网站
docker container run nginx
docker run nginx
docker container ls
docker ps
docker container ls -aq
docker container ps -a
docker container ps -aq
docker container stop $(docker container ps -aq)
docker stop
docker container rm $(docker container ps -aq)
docker container rm $(code) -f
docker rm
端口映射
-p 端口映射,前面是本机端口,后面是容器的端口,比如吧 Docker 的 80 映射到就本机的 90,需要 90:80
docker container run -p 80:80 nginx
docker container run -d -p 80:80 nginx
docker attach $(code)
docker container logs $(code)
docker container logs -f $(code)
docker container run -it ubuntu sh
容器中输入 “exit”
exec 执行,-it 交互模式,sh 交互的方式,用 shell 交互
docker exec -it $(code) sh
获取镜像的几种方式
pull from registry (online)
Dockerfile (online)
自有文件导入 (offline)
示例: WordPress
docker pull wordpress
docker image
docker image pull $(image-name)
docker image ls
docker image inspect baf
官方的方式如果不够的话,可以从其他网站上拉取镜像,比如 https://quay.io
docker image pull quay.io/calico/node
docker image inspect $(image-id/name)
docker image rm
-o 代表输出,后面代表输出的名字
docker image save busybox:latest -o myBusybox.image
docker image load -i ./myBusybox.image
Dockerfile
- 用于构建 docker 镜像的文件
- 包含了构建镜像需要的指令
- 有其特定的语法规则
尝试制作一个镜像,安装一个 ubuntu 系统,并且下载安装 python 环境
1 | |
docker image build -t $(image-name) $(file-path)
docker image build -t jspang .
docker image build -f $(file-name) -t $(image-name)
docker image build -t jspangcom/jspang
docker image tag $(old image name) $(new image name)
docker login
docker image push $(name:[tag])
docker container run -d $(image-name) -p 80:80
FROM
FROM 基础镜像
选择镜像的三个基本原则:官方优于非官方,固定版本的 tag 优于 latest (生产项目),功能满足尽量体积小
RUN
RUN 执行指令。RUN 没一个都是一个分层,所以要适当少用 RUN,否则打包出来的镜像会变大
1 | |
正确的 RUN 指令,是把所有的执行命令放到一个 RUN
1 | |
COPY
复制普通文件,如果复制的路径不存在,就会自动创建(可以复制本地文件)
1 | |
ADD
ADD 和 COPY 稍微不同,ADD 会解压 gzip 文件
1 | |
WORKDIR
切换工作目录,比如切换到 /app 工作目录,所有操作会进入 /app 下执行
1 | |
ARG 和 ENV 变量
注意 ENV 变量值不能有任何空格,ARG 也是,在普通变量上没什么区别,两者都行
1 | |
两者的区别
- ARG 是构建环境,ENV 是可以带到镜像中,镜像中
env命令可以看到 ENV 变量 - ARG 可以在构建中改变,ENV 不可变,使用 –build-arg $()
docker image build -f Dockerfile.ARG -t ipinfo-arg-2.0.0 –build-arg $(arg-name)=$(arg-value) $(dir)
CMD 命令
docker system prune -f
docker image prune -a
CMD 命令需要遵守几个规则
- 容器启动时默认执行
- 如果 docker container run 启动时制定了其他命令,那么 CMD 失效
- 如果定义了多个 CMD,只有最后一个 CMD 生效
1 | |
ENTRYPOINT
ENTRYPOINT 也是设置容器启动时要执行的命令,但和 CMD 有区别
- CMD 设置的命令,可以再 docker container run 传入其他命令覆盖,但是 ENTRYPOINT 一定会执行
- ENTRYPOINT 可以和 CMD 联合使用,ENTRYPOINT 设置执行的方法, CMD 用于传参数
docker container run –rm -t demo-entrypoint echo “jspang.com”
1 | |
VOLUME
VOLUME [“/${dir name}”] 访问文件夹,没有就创建
docker history $(image-id) 具体镜像的分层情况
docker container run -d my-image
docker container exec -it $(ID) sh
docker image build -f Dockerfile-cmd -t demo-cmd
docker container run -it demo-cmd
docker volume ls
docker volume inspect $(volume-name|data-name)
docker -v $(data-name):$(data-path)
docker container run -d -v my-data:/app my-image
docker volume ls
docker container ls
docker container rm -f e00
docker container run -d -v my-data:/app my-image
1 | |