本文为学习慕课网Docker入门教程后的笔记
1. Docker介绍
Docker和虚拟机的区别
Docker的架构
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运行成为一个容器之后,会产生一个新层,容器层,是可读可写的
分层的好处
不同的镜像之间可能存在有几层是共享的,减少存储压力
5. volume:独立于容器之外的持久化存储
方法一:挂载一个卷
docker run -d --name nginx -v /usr/share/nginx/html nignx (/usr/share/nginx/html内部的一个地址)
docker inspect nginx (得知容器内部所有的信息)
可以知道宿主机中的路径挂载到了容器内的地址
方法二:本地的一个目录挂载到容器中
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 网络
网络类型:
-
Bridge桥接模式,docker默认类型,分配独立的network namespace,需要端口映射
-
Host模式,和宿主机使用一个network namespace ,使用宿主机的ip和端口
-
None模式,docker不和外界通讯