本文为学习慕课网Docker入门教程后的笔记

1. Docker介绍

Docker和虚拟机的区别

docker搭建rtsp 推流_nginx

Docker的架构

docker搭建rtsp 推流_html_02

docker搭建rtsp 推流_html_03

2.Docker命令小结

命令

用途

举例

docker pull

从远端仓库获取image

docker pull ubuntu(默认获取latest版本)

docker build

创建image

docker images

列出本地所有的image

docker ps

列出正在container

docker ps列出当前正在运行的容器,如果加上-a则会展示历史容器

docker run

运行container

docker run nginx -d -p 80:80(-d表示在后台执行,-p表示端口映射,格式为宿主机端口:容器端口)

docker stop

停止正在运行的容器

后接ID

docker rm

删除container

后接ID

docker rmi

删除image

后接ID

docker cp

在host 和container之间拷贝文件

docker cp index.html 容器ID://usr/share/nginx/html

docker commit

保存改动为新的Image

docker commit -m “fun” 容器ID nginx-fun (-m后面是保存新镜像的messgae,nginx-fun是新镜像名字)

docker exec

进入运行的容器内部

docker exec -it 容器ID /bin/bash (以命令行的方式进入)

3. Dockerfile介绍

一个简单的Dockerfile实例介绍(默认文件名字就叫Dockerfile)

FROM alpine:latest //代表该镜像的基础镜像

MAINTAINER hh //代表作者

CMD echo ‘hello docker’ //运行命令

然后利用docker build命令制作

docker build -t hellp_docker . //-t 代表标签,也就是新镜像的名字,.代表当前目录,就是把目录中的内容都送到docker engine,用于产生image

4. Dockerfile语法介绍

命令

用途

举例

FROM

base image

FROM hello-world

RUN

执行命令

RUN apt-get update

ADD

添加文件

除了CPOY的功能外,还能将远程服务器上的文件添加进来

COPY

拷贝文件

COPY index.html /val/www/html

CMD

执行命令

EXPOSE

暴露端口

EXPOSE 80

WORKDIR

指定路径

指定运行命令的路径

MAINTAINER

维护者

ENV

设定环境变量

ENTRYPOINT

容器入口

ENTRYPOINT ["/usr/sbin/nginx","-g",“daemon off;”] 运行的时候会把数组拆开,拼接成一个命令;如果指定ENTRYPOINT之后,CMD指定的字符将成为ENTRYPOINT命令后面的参数

USER

指定用户

指定执行该命令的用户

VOLUME

mount point

指定容器挂载的卷

ENTRYPOINT和CMD的区别

https://www.kancloud.cn/spirit-ling/docker-study/1413265

镜像分层

Dockerfile中的每一行都产生一个新层

对于已经存在的Image,他的每一层都是只读的,当image运行成为一个容器之后,会产生一个新层,容器层,是可读可写的

docker搭建rtsp 推流_nginx_04

分层的好处

不同的镜像之间可能存在有几层是共享的,减少存储压力

5. volume:独立于容器之外的持久化存储

方法一:挂载一个卷

docker run -d --name nginx -v /usr/share/nginx/html nignx (/usr/share/nginx/html内部的一个地址)

docker inspect nginx (得知容器内部所有的信息)

docker搭建rtsp 推流_html_05

可以知道宿主机中的路径挂载到了容器内的地址

方法二:本地的一个目录挂载到容器中

docker run -v $PWD/code: /var/www/html nginx (PWD代表当前目录,冒号后面代表的是挂载在容器内的目录)

方法三:创建一个仅有数据的容器,并把该容器当作volume挂载在其他容器内

docker create -v $PWD/data:/var/mydata --name data_container ubuntu

(-v表示volume,–name是给容器起个名字,这里的ubuntu是指基础镜像)

docker run -it --volumes-from data_container ubuntu /bin/bash

(–volume-from 后面跟着的就是要作为volume被挂载的镜像,这里的ubuntu是指要把data_container挂载到ubuntu里面)

利用mount命令可以查看到挂载的数据卷

6.registry仓库

与registry交互相关命令

docker search hello–world 搜索镜像

docker pull hello-world 拉去镜像

docker push myname/hello-world 推送自己的镜像

docker tag docker/whaleasy hehe/whaleasy (把docker/whaleasy这个镜像打一个新tag,命名为hehe/whaleasy)

7. docker compose

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

Compose 使用的三个步骤:

使用 Dockerfile 定义应用程序的环境。

使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。

最后,执行 docker-compose up 命令来启动并运行整个应用程序。

docker-compose.yml文件常用命令

命令

用途

build

本地创建镜像

command

覆盖缺省命令

depends_on

连接容器

ports

暴露端口

volumes


image

pull镜像

docker-compose.yml文件举例:想搭建ghost博客项目,用到了nginx和mysql

version: '2'
networks:
    ghost:

services:
    ghost-app:
        build: ghost
        networks:
            - ghost
        depends_on:
            - db
        ports:
            - "2368:2368"
    nginx:
        build: nginx
        networks:
            - ghost
        depends_on:
            - ghost-app
        ports:
            - "80:80"
    db:
        image: "mysql:5.7.15"
        networks:
            - ghost
        enviroment:
            MYSQL_ROOT_PASSWORD: mysqlroot
            MYSQL_USER: ghost
            MYSQL_PASSWORD: ghost
        volumes:
            - $PWD/data:/var/libmysql
        ports:
            - "3306:3306"

docker-compose命令

命令

用途

举例

up

启动服务

docker-compose up -d

stop

停止服务

docker-compose stop

rm

删除服务中的各个容器

logs

观察各个容器的日志

ps

列出服务相关的容器

8.docker 网络

网络类型:

  1. Bridge桥接模式,docker默认类型,分配独立的network namespace,需要端口映射
  2. Host模式,和宿主机使用一个network namespace ,使用宿主机的ip和端口
  3. None模式,docker不和外界通讯
  4. docker搭建rtsp 推流_nginx_06