docker学习笔记

Docker介绍

官方:an open source project to pack,ship,and run any application as a lightweight container.
docker是一个可以将任何应用以轻量级容器的形式来打包,发布和运行的开源项目。
术语

English中文
host宿主机
image镜像
container容器
registry仓库
daemon守护程序
client客户端

Docker Linux安装

运行命令:

sudo wget -qO- https://get.docker.com | sh

这里写图片描述

// 给出用户名将用户添加到用户组
sudo usermod -aG docker your-user
// 查看docker信息
docker info

这里写图片描述

  • sudo:用root的身份来执行命令
  • wget:命令行的一个下载工具命令
  • -qO-:精简输出(-q)并输出到标准输出而不是文件(O-)
  • sh:下载shell脚本并交给shell执行

Docker架构介绍与实战

架构介绍

这里写图片描述

这里写图片描述

Docker daemon是核心程序,做各种各样的docker操作,如下载docker的镜像,运行容器等。通过客户端命令交给Docker daemon来做实际操作。

Dockerfile

通过编写简单的文件自创Docker镜像
输入命令

mkdir dockertest // 创建一个docker测试目录
cd dockertest // 进入docker测试目录
touch Dockerfile // 创建Dockerfile
vim Dockerfile // 对Dockerfile进行编辑

编辑内容如下:

这里写图片描述

然后保存退出。
继续输入命令:

// 创建images, -t:赋予标签名为hello_docker
docker build -t hello_docker .
// 查看是否成功生成images
docker images hello_docker
// 运行docker
docker run hello_docker

这里写图片描述

接下来尝试一下稍微复杂的Dockerfile
修改Dockerfile的内容:

这里写图片描述

同时使用touch index.html新建一个index.html文件,在里面随意写上一点内容。
这里写图片描述

接下来执行以下命令,显示index.html里的内容则为成功:

// -t:给出TAG jwing:用户名
docker build -t jwing/hello-nginx .
// -d:守护进程化 -p:端口映射
docker run -d -p 80:80 jwing/hello-nginx
// 访问测试
curl http://localhost

这里写图片描述

Dockerfile语法小结

命令用途
FROMbase image
RUN执行命令
ADD添加文件
COPY拷贝文件
CMD执行命令
EXPOSE暴露端口
WORKDIR指定路径
MAINTAINER维护者
ENV设定环境变量
ENTRYPOINT容器入口
USER指定用户
VOLUMEmount point

Volume

Volume提供独立于容器之外的持久化存储
数据卷
数据卷是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性:

  • 数据卷可以在容器之间共享和重用
  • 对数据卷的修改会立马生效
  • 对数据卷的更新,不会影响镜像
  • 卷会一直存在,直到没有容器使用,类似于 Linux 下对目录或文件进行 mount。

示例1:运行一个nginx容器,通过-v挂载一个卷

// --name nginx:赋予名字为nginx
docker run -d --name nginx -v /usr/share/nginx/html nginx
// 列出容器所有相关信息
docker inspect nginx

在信息中找到Mounts中的Source,复制其url执行下面的操作。

这里写图片描述

/* 
// mac系统需要先执行(进入主机)
screen ~/Libray/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty
 */
 // 进入该路径
cd /var/lib/docker/volumes/e7c00d4f12fc19c93d8d641a96040c8c062413c138f8aac7ca33b9481233d77f/_data // 刚才复制的url
// 查看index.html
cat index.html
// 更改index.html
echo "it's index.html" > index.html
/*
// mac系统可通过该命令进入容器
docker exec -it nginx /bin/bash
cd /usr/share/nginx/html/
*/
// 查看index.html,内容被成功修改
cat index.html

这里写图片描述

示例2:将本地的一个目录挂载到容器的一个数据卷中
首先准备好一个html目录放在当前目录下并在目录中写好一个index.html

// 将当前目录下的html目录映射到容器中
docker run -p 80:80 -d -v $PWD/html:/usr/share/nginx/html nginx
// 测试访问
curl http://localhost
// 在本机host中修改index.html
vi html/index.html
// 测试访问
curl http://localhost

这里写图片描述

这里写图片描述

可以发现将本地开发的内容修改后,就可以自动的在容器中反应出来。

示例3:创建一个仅有数据的容器,并将这个容器当做一个volume挂载在其他容器里面去
仅有数据的容器可以被多个容器挂载,做到数据共享

// 创建data目录
mkdir data
// 将当前目录下的data目录创建为仅有数据的容器,目标目录为/var/mydata,名称定义为data_container。 ubuntu:容器的基础镜像
docker create -v $PWD/data:/var/mydata --name data_container ubuntu
// --volumes-from:从另外的容器挂载, /bin/bash:直接进入容器中
docker run -it --volumes-from data_container ubuntu /bin/bash
// 在mount列出的信息中可以找到自己放入的容器所属的目录mydata
mount
// 进入mydata文件夹
cd /var/mydata/
// 随意创建一个文件
touch whatever.txt
// 退出容器
exit
// 查看data目录的内容,可以看到刚才在容器中创建的文件
ls data

这里写图片描述

这里写图片描述

镜像仓库(Registry)

Registry实际上是一个saas的服务,提供注册并且存储镜像,使大家能够进行镜像的共享。
国内的一些仓库:

  • daocloud
  • 时速云
  • aliyun

Registry交互命令

  • docker search whalesay // 搜索镜像
  • docker pull whalesay // 拉取镜像
  • docker push myname/whalesay // 上传镜像

搜索镜像:

这里写图片描述

运行镜像:
这里写图片描述

上传镜像需要登录docker账号,执行docker push myname/whalesay进行上传。

多容器app(compose)

docker-compose安装:

若安装失败,可以先安装pip后进行安装(ubuntu安装方式,chentOS可使用yum命令安装):

apt-get update
// 安装python-pip
apt-get install python-pip
// 如果有老版的,先删除掉
pip uninstall docker-compose 
// 安装docker-compose
pip install docker-compose
// 查看版本,是否成功安装
docker-compose --version

关于实例,网上有很多可以参考:《实战docker,构建nginx反向代理tomcat,学习link和docker-compose
docker-compose.yml常用命令

命令用途
build本地创建镜像
command覆盖缺省命令
depends_on连接容器
ports暴露端口
volumes
imagepull镜像
up启动服务
stop停止服务
rm删除服务中的各个容器
logs观察各个容器的日志
ps列出服务相关的容器

Docker命令小结

命令用途
docker pull获取image
docker build创建image
docker images列出image
docker run运行container
docker ps列出container
docker rm删除container
docker rmi删除image
docker cp在host和container之间拷贝文件
docker commit保存改动为新的image
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值