docker

镜像

常用连接:

docker 镜像仓库:https://registry.hub.docker.com/  

docker操作文档: https://docs.docker.com/

 

1. 查看本地镜像: docker images

  docker images -q 只显示镜像id

2. 搜索镜像 :docker search [镜像名]  

  docker search golang

3. 从docker hub拉取镜像到本地: docker pull   [镜像名] (不指定tag, 默认拉取最新版本)

  docker pull python (拉取的是最新版本)

  docker pull   python:3.7  (拉取指定版本)

4. 提交镜像到docker hub,docker push [镜像名:tag] 

  docker push myImage:1.0

5. 删除镜像 docker rmi 镜像名:tag | 镜像id  (必须没有 在运行的容器) 

6. 删除所有镜像 docker rmi $(docker images -aq)

 

docker镜像采用分层结构

docker镜像实际是由一层一层的文件系统组成,联合文件系统。

bootfs:主要包含bootloader和kernel,bootloader主要引导加载kernel,linux启动时,会加载bootfs文件系统。docker镜像的最底层就是bootfs。当boot加载完,

整个内核就都在内存中了,此时内存的使用权就交给内核了,此时会卸掉bootfs。

rootfs:在bootfs之上,包含的就是典型的linux系统的文件和目录。rootfs就是各种不同的操作系统发行版,如centos、ubuntu。

平时安装一个centos或Ubuntu可能需要几个G,docker这里只有几百M。其实相当于是精简版的os,rootfs可以很小,包含最基本的命令、工具、程序库,底层直接使用宿主机的kernel,自己有rootfs即可。

好处:资源共享。 比如,有的镜像都是从相同的基础镜像构建而来,那么当pull镜像时,就不会再拉取这个基础镜像了,因为可以共用,而且每一层都可以共用。

docker镜像是只读的,当容器启动时,一个新的可写层加载到镜像的顶层,这一层成为容器层,容器之下叫镜像层。

 

容器

1. 查看容器 docker ps (只显示当前正在运行的容器)

   docker ps -a   查看所有容器
  docker ps -aq      查看所有容器id

2. 运行容器 docker run 镜像名:tag | 镜像id  (不指定tag,默认运行最新版本)

docker run 的常用参数:

-d 后台运行容器

 -i: 以交互模式运行容器,通常与 -t 同时使用;

 -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;

-P: 随机端口映射,容器内部端口随机映射到主机的端口

-p: 指定端口映射,格式为:主机端口:容器端口

--name="golang": 为容器指定一个名称

-h "hostname": 指定容器的hostname

-e pwd="password": 设置环境变量;

--link 添加链接到另一个容器;

-v: 绑定一个数据卷

 

3. docker start 容器id | 容器名   启动容器

4. docker stop 容器id | 容器名   停止容器

5. docker restart 容器id | 容器名   重启容器

6. docker pause 容器id | 容器名   暂停容器

7. docker unpause 容器id | 容器名   恢复容器

8. docker  kill 容器id | 容器名   杀死(停止)容器

9. docker rm 容器id | 容器名   删除容器

10. docker rm $(docker ps -aq) 删除所有容器

11. docker logs 容器id | 容器名   查看容器日志

  docker logs -f   实时监控容器日志

12. docker attach 容器id | 容器名 进入容器正在运行的界面

13 docker exec -it 容器id | 容器名 以交互方式进入容器

14 docker cp 容器id:容器目录或文件 主机目录      将容器文件拷贝到主机

15 docker cp 主机目录或文件  容器id:容器目录     将主机文件拷贝到容器

16 docker top 容器id | 容器名称  查看容器中的进程

17 docker inspect 容器id | 容器名称  查看容器元数据

18 docker commit -m "备注" -a "作者" 容器id | 容器名  镜像名:tag

19 docker save 镜像名:tag -o 文件名.tar  备份镜像

20 docker load -i 文件名.tar 

数据卷

docker run -v 宿主机绝对路径:容器内路径

docker run -v  宿主机绝对路径:容器内路径:ro

    ro:只读, 如果指定,容器内的文件是只读的。 这种方式会将容器路径的原始数据清空,始终以宿主机为主

docker run -v volumeName: 容器内路径

    volumName相当于数据卷的别名。 如果这个别名数据卷存在,则直接使用, 不存在创建

    数据卷默认目录 /var/lib/docker/volumes/

docker volume 相关命令

docker volume ls 查看数据卷

docker volume create 卷名 创建数据卷

docker volume inspect 卷名 查看数据卷元数据

docker volume rm 卷名 删除数据卷

docker run --volume-from 容器名    继承其他容器的数据卷。当继承容器或被继承容器,以及所挂载主机目录的文件添加修改时,会一起变化。其中一个容器的数据卷删除,不影响其他继承容器。

 

网络

  当docker启动时,会自动在主机上创建一个docker0的虚拟网桥,实际上是linux的一个网桥,可以理解为一个交换机,会挂载到它网口之间进行转发。

docker随机分配一个本地为占用的私有网段中的一个地址给docker使用。

   当创建一个容器时,同时会创建一对veth:pair接口,当数据包发送给一个接口时,另一个接口也可以收到。这对接口一个在容器内(eth0),另一端在本地并挂载到docker0网桥,

名称以veth开头。通过这种方式,主机可以和容器通信,容器与容器之间也可以通信。

docker中的网桥类型:bridge, host, null

 

docker network create -d bridge(默认) 网络名称  创建网络自定义网桥

docker network ls   查看网络列表

docker network inspect 网络名  查看网络详细信息

docker network rm 网络名    删除网络

docker run  --network 网络名  ...     启动容器时加入某个网络

docker network connect 网络名 容器id(容器名称)    容器启动之后加入网络

docker network disconnect  网络名 容器id(容器名称)    容器断开已加入网络

 

Dockerfile

FROM  指定基础镜像

RUN    构建镜像时执行的命令

EXPOSE  容器向外暴露的端口

ENV  容器所使用的环境变量, 可在docker run时通过- e 修改

ADD  复制src路径下的内容到容器dest目录。src可为url会自动下载,也可以是tar文件,且会自动解压

COPY  复制sec路径的内容到容器dest目录,但不会自动解压

LABEL   指定生成镜像元数据的标签信息

VOLUME  容器数据卷挂载点

WORKDIR  配置工作目录,可为CMD、ENTRYPOINT、RUN指定工作目录

CMD  指定启动容器时默认的执行的命令,

ENTRYPOINT  启动容器时执行的命令

 CMD & ENTRYPOINT

  1. 直接命令方式     python demo.py

  2. 数组方式    ["python", "demo.py"]

  区别:

    1. run:  dockerfile中有多个run时,只有一个生效, 在docker run使用命令时会被覆盖

      docker run 镜像 其他命令(如 ls)

    2. entrypoint:在docker run 指定entrypoint时会被覆盖

      docker run --entrypoint 覆盖命令 镜像

   使用:

    entrypoint用于固定的命令,cmd为entrypoint指定参数

    如: entrypoint python

       cmd  demo.py  (如果执行文件有变动,则可直接在docker run时覆盖)

 

docker-compose

 常用命令

docker-compose  up 启动项目

docker-compose up 服务id  对当前docker-compose中对应服务id操作

  docker-compose up会自动构建镜像,创建服务,启动服务,编排容器

docker-compose up -d  后台启动项目

docker-compose down 关闭项目

docker-compose down 服务id  关闭服务

  docker-compose down 会关闭所有容器,并移除网络

docker-compose exec 服务  进入服务(相当于 docker exec)

docker-compose ps 查看在运行的服务

docker-compose restart 重启项目

docker-compose -t 服务id   重启服务

docker-compose start 启动项目

docker-compose stop 停止项目

docker-compose rm -f(强制删除) -v(容器挂载的数据间) 服务id    删除整个项目或某个服务

docker-compose top 服务id 查看项目 或服务运行状态

 

docker-compose文件常用指令

build  通过docker-compose在启动容器之前根据dockerfile构建镜像

command  覆盖容器启动后执行的命令

container_name  指定启动容器的名称

depends_on  解决容器启动的依赖,启动的先后顺序

  当前服务不会等待被依赖服务完全启动才启动

environment  用来给容器启动指定环境变量,相当于 docker run -e

env_file  用来给容器启动指定环境文件,相当于docker run --env-file

expose  用于容器暴露端口

images  用来指定容器启动所使用的的镜像,相当于docker run image(镜像名)

networks  用来指定容器所使用的网桥,相当于docker run -network

ports  用于容器与主机之间的端口映射,相当于docker run -p

volumes  用于数据卷目录的映射,相当于docker run -v

restart  用于指定容器重启的策略,如docker run --restart always

 

posted @ 2022-02-22 22:43  F.or,T  阅读(70)  评论(0编辑  收藏  举报