慕课网_《Docker入门》学习总结
时间:2017年09月16日星期六
说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com
教学源码:无
学习源码:无
第一章:课程简介
1-1 课程介绍
Docker入门教程
Docker简介:什么是Docker 镜像与容器 容器存储 Registry 多容器app
面向用户
对docker感兴趣的开发、测试、运维
预备知识
linux命令行 bash shell脚本
1-2 Docker介绍
什么是Docker
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中, 然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。 容器是完全使用沙箱机制,相互之间不会有任何接口。
与现有技术进行类比
可以粗糙地理解为轻量级的虚拟机 开挂的chroot(chroot:对应用程序作了文件系统的分离)
Docker与虚拟机
1-3 Mac安装
学习笔记
进入docker官网:www.docker.com 下载docker安装包:Docker.dmg 打开docker open Docker.dmg 或双击Docker.dmg 将Docker拖到Applications里面 验证安装 docker info
1-4 Linux安装
学习笔记
安装docker本身 sudo wget -qO- https://get.docker.com/ | sh 允许非root用户运行docker sudo usermod -aG docker zc 验证安装 docker info
1-5 Windows安装
学习笔记
官网地址:https://www.docker.com/ 下载安装包:https://www.docker.com/docker-windows 执行安装包:Docker for Windows Installer.exe
第二章:Docker架构
2-1 架构介绍
Docker架构
学习笔记
docker run ubuntu echo hello docker 使用ubuntu镜像,在里面运行了echo hello docker这个命令,输出就是hello docker docker run nginx docker images 查看本地镜像 docker run -p 8080:80 -d daocloud.io/nginx 运行daocloud.io/nginx镜像 -p 端口映射,将nginx的80端口映射到本地的8080端口 -d 使用守护进程启动 docker ps 查看当前正在运行的容器 docker cp index.html 容器ID:容器内部文件路径 docker cp index.html 17asdasdasa://usr/share/nginx/html 将index.html文件拷贝到容器ID为17asdasdasa容器内部,路径为//usr/share/nginx/html docker stop 容器ID 停止指定容器 docker commit -m 'fun' 容器ID nginx-fun 保存容器为镜像,镜像名为nginx-fun docker rmi 镜像ID 删除指定镜像 docker ps -a 查看所有容器(正在运行和停止运行) docker rm 容器ID 删除指定容器 docker pull 获取镜像 docker build 创建镜像 docker images 列出镜像 docker run 运行镜像为容器 docker ps 列出正在运行的容器 docker rm 删除容器 docker rmi 删除镜像 docker cp 在主机和容器之间拷贝文件 docker commit 保存改动后的容器为新的image
第三章:Dockerfile
3-1 Dockerfile介绍
学习笔记
第一个Dockerfile FROM alpine:latest MAINTAINER zc CMD echo 'hello docker' // 依赖于基础镜像alpine:latest // 标识镜像信息 // 需要运行的命令 touch Dockerfile 产生一个Dockerfile文件 vim Dockerfile 编辑Dockerfile文件 docker build -t hello_docker . 构建docker镜像,-t参数指定镜像名称,最后面的点(.)表示构建镜像文件的路径 docker images docker run hello_docker
3-2 Dockerfile实战
学习笔记
第二个Dockerfile FROM ubuntu MAINTAINER zc RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list RUN apt-get update RUN apt-get install -y nginx COPY index.html /var/www/html ENTRYPOINT ["/usr/sbin/nginx","-g","deamon off;"] EXPOSE 80 // 依赖于基础镜像ubuntu // 标识镜像信息 // 运行ubuntu命令,新增一个软件仓库镜像地址 // 运行ubuntu命令,更新软件 // 运行ubuntu命令,安装nginx // 拷贝本地文件到镜像内部 // 在镜像中默认启动nginx服务 // 镜像暴露服务的端口 mkdir dockerfile2 cd dockerfile2 touch Dockerfile vim Dockerfile touch index.html vim index.html 今天是周末! docker build -t zc/hello-nginx . docker run -d -p 80:80 zc/hello-nginx curl http://localhost 使用curl进行测试
Dockerfile语法
FROM:指明基础镜像名称。必填 RUN:用于执行命令,当RUN执行完毕后,将产生一个新的文件层。可选 ADD:向镜像添加新文件或者新目录。可选 COPY:从主机向镜像复制文件。可选 CMD:指定此镜像启动时默认执行命令。可选 EXPOSE:用于指定需要暴露的网络端口号。可选 WORKDIR:设定此镜像后续操作的默认工作目录。可选 MAINTAINER:可用于提供作者、版本及气他备注信息。可选 ENV:用于在镜像中添加环境变量。可选 ENTRYPOINT:在镜像中设定默认执行的二进制程序。可选 USER:在镜像构建过程中,生成或者切换到另一个用户。可选 VOLUME:向镜像中挂载一个卷组。可选
3-3 镜像分层
镜像分层
Dockerfile中的每一行都产生一个新层 FROM alpine:latest 4dffsd5454wq MAINTAINER zc fbdfasdfasfd554 CMD echo 'hello docker' 3df545dfad4a
第四章:Docker存储
4-1 Volume介绍
Volume
提供独立于容器之外的持久化存储
4-2 Volume操作
学习笔记
第一种形式 docker run -v 容器内部地址 镜像名称 docker run -d --name nginx -v /usr/share/nginx/html nginx 运行nginx容器,通过-v挂载一个卷组,通过-d后台启动,通过--name为容器指定名称 docker inspect 容器名称 docker inspect nginx 查看指定容器所有信息 查看Mounts节点下的Sources节点和Destination节点信息 该容器把宿主机的Sources对应目录挂载到容器内部的Destination的目录地址 cd Sources对应的目录路径 vim index.html,修改index.html文件 docker exec -it 容器名称 /bin/bash 进入到容器内部 cd Destination对应的路径路径 然后查看index.html文件,发现是刚刚修改后的内容,即挂载成功,映射关系正确 第二种形式 docker run -v $PWD/code:/var/www/html nginx 本地目录挂载到容器里面的一个路面里面 docker run -p 80:80 -d -v $PWD/html:/usr/share/nginx/html nginx cat html/index.html 查看本地文件的内容 docker exec -it 容器名称 /bin/bash 进入到容器内部 cat /usr/share/nginx/html/index.html 发现其内容和本地文件的内容一致,即映射关系正确 第二种形式 docker run --volumes-from ... mkdir data docker create -v $PWD/data:/var/mydata --name data_container ubuntu 产生一个仅有数据的容器 docker run -it --volumes-from data_container ubuntu /bin/base 从另外一个容器挂载, 运行并直接进入容器内部 mount cd mydata touch whatever.txt exit cd data ls 查看本地data目录下是否有whatever.txt文件 可以多个容器挂载一个数据容器,实现数据共享
第五章:镜像仓库
5-1 Registry介绍
Docker相关术语
host:宿主机 image:镜像 container:容器 registry:镜像仓库 daemon:守护程序 client:客户端
Registry相关命令
docker search 镜像名称 从镜像仓库中搜索指定镜像 docker pull 镜像名称 从镜像仓库中拉取指定镜像 docker push 镜像名称 将本地镜像推送到镜像仓库
国内的一些镜像仓库
daocloud 时速云 阿里云
5-2 Registry实战
学习笔记
docker search whalesay 在镜像仓库中搜索whalesay docker pull docker/whalesay 从镜像仓库中拉取镜像docker/whalesay到本地 docker images 查看本地镜像信息 docker run docker/whalesay cowsay Docker so fun 运行docker/whalesay镜像,并指定参数 docker tag docker/whalesay zc/whalesay 依赖docker/whalesay镜像产生新的zc/whalesay镜像(类似复制) docker push zc/whalesay 将镜像zc/whalesay推送到镜像仓库 docker login 在push之前,需要登录。默认登录到docker hub 到docker hub官方地址 查看到自己push的镜像
第六章:多容器app
6-1 Compose介绍
docker-compose
多容器app docker-compose是独立的软件 docker-compose安装 linux:curl https://github.com/docker/compose
6-2 Compose安装
学习笔记
curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose 下载docker-compose包到/usr/local/bin/docker-compose chmod a+x /usr/local/bin/docker-compose 给/usr/local/bin/docker-compose授可执行权限 docker-compose --version 验证安装
6-3 Compose实战
实战案例介绍
app名称:ghost,是一个博客平台程序 安装之后,可自己写文章或别人发布 架构:nginx-ghost app-mysql 分别分为三个容器
docker-compose.yml文件
ghost-app: build: ghost depends_on: - db ports: - "2368:2368" nginx: build: nginx ports: - "80:80" depends_on: - ghost-app db: images: "mysql:5.7.15"
docker-compose.yml命令
build:本地创建镜像 command:覆盖缺省命令 depends_on:连接容器 ports:暴露端口 volumes:挂载卷组 image:拉取镜像
docker-compose命令
up:启动服务 stop:停止服务 rm:删除服务中的各个容器 logs:观察各个容器中的日志 ps:列出服务相关的容器
学习笔记
mkdir ghost cd ghost mkdir ghost mkdir nginx mkdir data // ghost镜像构建 cd ghost touch Dockerfile vim Dockerfile FROM ghost COPY ./config.js /var/lib/ghost/config.js EXPOSE 2368 CMD ["npm","start","--production"] // 依赖ghost官方镜像 // 拷贝本地配置文件到镜像中 // 声明暴露服务的端口 // 执行启动命令。ghost为node.js程序,所以使用npm命令 touch config.js vim config.js var path = require('path'), config; config = { production: { url:'http://mytestblog.com', mail: {}, database: { client: 'mysql', connection: { host: 'db', user: 'ghost', password: 'ghost', database: 'ghost', port: '3306', charset: 'utf8' }, debug: false }, paths: { contentPath: path.join(process.env.GHOST_CONTENT,'/') }, server: { host: '0.0.0.0', port: '2368' } } }; module.exports = config; // nginx镜像构建 cd nginx touch Dockerfile vim Dockerfile FROM nginx COPY nginx.conf /etc/nginx/nginx.conf EXPOSE 80 // 依赖nginx官方镜像 // 拷贝本地配置文件到镜像中 // 声明暴露服务的端口 touch nginx.conf vim nginx.conf worker processes 4; events {worker_connections 1024;} http { server { listen 80; location / { proxy_pass http://ghost-app:2368; } } } 回到ghost根路径 ls显示 ghost:存放Dockerfile和配置文件用来构建镜像 nginx:存放Dockerfile和配置文件用来构建镜像 data:存放博客的数据 // compose文件用于描述整个系统的架构 touch docker-compose.yml vim docker-compose.yml version: '2' networks: ghost: service: 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 environment: MYSQL_ROOT_PASSWORD: mysqlroot MYSQL_USER: ghost MYSQL_PASSWORD: ghost volumes: $PWD/data:/var/lib/mysql ports: "3306:3306" docker-compose up -d 启动 docker-compose stop 关闭 docker-compose rm 删除 docker-compose build 构建 访问http://localhost/ghost
第七章:课程总结
7-1 课程总结
课程总结
Docker介绍:容器、镜像 如何制作镜像 如何分享镜像 如何持久化容器数据 如何编排一个多容器的应用
相关推荐
魅惑青花瓷 2020-11-11
yangkang 2020-11-09
MichaelJScofield 2020-11-06
TaoTaoFu 2020-11-06
liaochaowu 2020-11-16
ChlatZed 2020-11-11
lnkToKing 2020-10-29
ChlatZed 2020-10-27
ChlatZed 2020-10-13
时光流水 2020-09-23
yangkang 2020-09-23
changecan 2020-09-22
dusuanyun 2020-09-21
newisI 2020-09-01
liaochaowu 2020-09-14
ShangQuan0 2020-09-10
fearlessxjdx 2020-09-04
libra0 2020-09-02
ChlatZed 2020-08-23