Docker笔记

Docker学习笔记

0x01 Docker命令总结

  1. 使用docker stop $CONTAINER_ID来终止正在运行的容器.
    查看id,可以使用docker ps -a来查看所有容器.
    docker ps只能查看正在运行的容器
  2. 交互式docker docker exec -it 容器ID /bin/bash
  3. 重新启动已经停止的容器 docker start 容器id 。 Docker容器重新启动的时候,会沿用docker run命令时指定的参数来运行。
  4. 自动重启容器

由于某种错误导致容器停止运行,还可以通过–restart标志,让docker自动重启。
docker run --restart=always --name test -d ubuntu /bin/bash -c "echo hello" 无论容器的退出代码是什么,Docker都会重启。

  1. 获取容器的信息。docker inspect 容器id/容器name
  2. 删除所有容器 docker rm 'docker ps -a -q' -q标志表示只返回容器的ID不返回容器其他信息。
  3. 拷贝本地文件到容器 docker cp 本地路径 容器长ID:容器路径
  4. 重启docker服务 sudo service docker restart
  5. 查看docker的日志 docker logs --tail="10" 容器名称
  6. docker日志重定向docker run --log-driver="syslog"
  7. docker 守护 进程 docker run -d --name test_1 ubuntu
    -d就是后台运行,–name就是为容器命名。
  8. 查看容器内的进程信息。docker top 容器名
  9. 查看当前镜像列表 docker images
  10. 删除一个或者多个镜像 docker rmi images
  11. 删除容器 docker rm 容器ID
  12. 拉取镜像 docker pull
  13. 查找镜像 docker search
  14. 查看镜像构建过程 docker history 镜像ID
  15. 查看docker构建过程 docker history
  16. 将镜像推送到 docker hub docker push
  17. 查看容器的端口映射情况 docker port 容器ID 或者 docker port 容器名称

常用例子

用Dockerfile 构建镜像
  1. Dockerfile文件内容
# Version:0.0.1 注释
FROM ubuntu:14.04  #第一条必须是FROM 指定一个存在的镜像(被称为基础镜像)
MAINTAINER  Tri0mphe7  #作者是谁
RUN echo 'hello Test' > /usr/share/nginx/html/index.html
EXPOSE 80

通过 sudo docker build -t="tri0mphe7/test1:v1 ." 构建新的镜像. -t 选项设置仓库和名称 v1表示标签
**最后有一个. 表示当前目录. **
docker build 语法 docker build [OPTIONS] PATH | URL | -

  1. 通过 docker build --no-cache 忽略Dockerfile构建缓存
挂载卷到容器
docker run -d -p 80 --name website -v $PWD/website:/var/www/html/website \
username/nginx nginx

创建一个名为website的容器。-v 选项,v是volume。将宿主机的目录作为卷挂载到容器中去

导入镜像到本地

dokcer load : 导入镜像到本地

docker load [OPTIONS]
  • docker load -i test.tar 将test.tar导入到本地镜像

知识点

0x01 简单知识点

  1. Docker 是C/S架构。
  2. Docker 用Registry来保存用户构建的镜像。 分为公有和私有。 公有Docker公司运营的公用叫做Docker Hub。
  3. 镜像是Docker生命周期中的构建和打包阶段,而容器是启动和执行阶段。
  4. copy-on-write技术,写时复制技术,COW技术。刚开始所有用户共享一块内存,当用户读取时,不发生改变,直接读取数据。当某一用户写入时,会新建一块内存将这一用户的数据写入,并且此用户指向新的内存地址,其他用户不变。
  5. Docker Hub中有两种类型的仓库:用户仓库和顶层仓库。 用户仓库用户自己创建,顶层仓库Docker内部维持。
  6. 不推荐使用commit创建镜像。
  7. 使用Dockerfile创建镜像。FROM指令指定一个已经存在的镜像,后续指令都将基于该镜像进行。
  8. docker run命令 -p 表示docker在运行时后应该向外部公开那些网络端口。-p 8080:80 表示将容器的80端口绑定到宿主机的8080上,也就是我们访问宿主机8080相当于访问docker80端口.

0x02 用Dockerfile创建镜像

基于Dockerfile构建新镜像

docker build -t="仓库名/镜像名:标签名"
忽略Dockerfile的构建缓存
docker build --no-cache -t="仓库名/镜像名:标签名"

  • CMD 指令

CMD指令用于指定一个容器启动时要运行的命令. RUN指令时指定镜像被构建时要运行的命令.
使用 docker run 后面跟的指令可以覆盖CMD指令.
CMD指令推荐使用数组的方式. 如 CMD ["/bin/bash","-l"]

  • ENTRYPOINT 指令

与CMD类似. docker run 命令行中指定的任何参数都会被当做参数传递给ENTRYPOINT指令中指定的指令.

  • WORKDIR 指令

从镜像创建新容器时设置工作目录, ENTRYPOINT和CMD指定程序在工作目录下执行.

sudo docker run -ti -w /var/log ubuntu pwd

-w 标志可以在运行时覆盖工作目录

  • ENV

镜像构建过程中设置环境变量。可以使用-e在docker run命令中传递环境变量,这些变量只会在运行时有效。
docker run -it -e "WEB_PORT=8080" ubuntu env

  • USER

指定该镜像以什么用户运行. 如果不通过USER指定用户,默认为root。
docker run命令中通过 -u标志来覆盖。

  • ADD

用来将构建环境上下文的文件和目录复制到镜像中。
ADD software.lic /opt/app/software.lic
ADD在处理本地归档文件(tar archive)时还有一些小魔法。如果将一个归档文件(gzip,bzip2)为源文件,Docker会自动将归档文件解开(unpack)。

  • LABEL

LABEL指令用于为Docker镜像添加元数据。
LABEL type="data" role="admin"

  • ONBUILD

能为镜像添加(trigger)。当一个镜像被用做其他镜像的基础镜像时,该镜像的触发器就会执行。
ONBUILD ADD . /var/www

0x03 RUN,CMD和ENTRYPOINT的区别

  • RUN命令执行命令并创建新的镜像层,通常用于安装软件包
  • CMD命令设置容器启动后默认执行的命令及其参数,但CMD设置的命令能够被docker run命令后面的命令行参数替换
  • ENTRYPOINT配置容器启动时的执行命令(不会被忽略,一定会被执行,即使运行 docker run时指定了其他命令)

0x04 docker run -p/-P 区别

  • 使用 -P 标记时,Docker会随机映射一个49000~49900的端口到内部容器开放的网络端口。
  • -p (小写)
# hostPort:containerPort 
docker run -p 8800:80  webapp  /bin/bash
#将容器内80端口映射到主机8800端口
# ip:hostPort:containerPort 映射指定地址的指定端口

0x05 --volumes-from

docker run -d -P --volumes-from james_blog jamtur01/apache

标志 --volumse-from 把指定容器里的所有卷都加入到新创建 容器里。这意味着新创建的apache容器可以访问 james_blog 容器里的所有卷。

Docker Registry

1、什么是Registry

一个registry是一个存储和内容交付系统,其中维护着若干命名的Docker镜像,用户使用
docker pushdocker pull命令和registry进行交互。

1.1、镜像命名

docker pull ubuntu指示docker从官方Docker Hub中拉取一个名字为ubuntu的镜像。
这条命令其实是docker pull docker.io/libary/ubuntu的简写。
docker pull myregistrydomain:port/foo/bar 指示docker拉取位于myregistrydomain:port的镜像

2、部署registry server

2.1、运行基于容器的Registry
#运行一个本地的registry
docker run -d -p 5000:5000 --name registry Registry:2		
2.2、常用命令
# 启动registry
docker run -d -p 5000:5000 --name registry registry:2
# 从Docker Hub上拉取镜像
docker pull ubuntu
# 给镜像打tag
docker image tag ubuntu localhost:5000/myfirstimage
# 推送至你自己的registry
docker push localhost:5000/myfirstimage
# 再次从你自己的registry拉取镜像
docker pull localhost:5000/myfirstimage
# 停止registry并删除所有数据
docker container stop registry && docker container rm -v registry

参考链接

https://www.cnblogs.com/cjsblog/p/12246286.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值