Docker安装

安装docker

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

将用户添加到docker用户组,不用root就可运行docker

$ sudo usermod -aG docker wongyaa

Docker架构

这里写图片描述
这里写图片描述
Docker daemon是核心程序,做各种各样的docker操作,如下载docker的镜像,运行容器等。通过客户端命令交给Docker daemon来做实际操作。
客户端通过命令通知守护线程,控制镜像调用容器,并与远程仓库交互。

docker命令

这里写图片描述这里写图片描述

调用image进入container命令:

docker run -i -t ubuntu:tag /bin/bash

images和container是什么

dockerfile方法创建镜像image

1、创建目录及文件

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

2、文件内容

#基础类
FROM alpine:latest
#作者
MAINTAINER author
#命令
CMD echo "hello docker!"

3、最后一步

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

nginx相关的Dockerfile

创建dockertest目录,新建Dockerfile文件,内容如下:

#基础镜像
FROM ubuntu
#作者
MAINTAINER Wongya
#加速下载,使用国内的镜像
RUN sed -i 's/archive.ubuntu.com/mirros.ustc.edu.cn/g' /etc/apt/sources.list
#更新程序库
RUN apt-get update
#安装nginx,-y表示不提醒
RUN apt-get install -y nginx
#拷贝index.html到容器指定目录
COPY index.html /var/www/html
#提供容器入口
ENTRYPOINT ["/usr/sbin/nginx","-g","daemon off;"]
#暴露监听端口80
EXPOSE 80

同级目录下创建index.html文件。
运行:

// -t:给出TAG wongya:用户名
docker build -t wongya/hello-nginx .
// -d:守护进程化 -p:端口映射
docker run -d -p 80:80 wongya/hello-nginx
// 访问测试
curl http://localhost
命令 用途
FROM base image
RUN 执行命令
ADD 添加文件
COPY 拷贝文件
CMD 执行命令
EXPOSE 暴露端口
WORKDIR 指定路径
MAINTAINER 维护者
ENV 设置环境变量
ENTRYPOINT 容器入口
USER 指定用户
VOLUME mount point

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就是路径,挂载到容器中的Destination中。
修改文件互相通信。

//进入容器的方法
docker exec -it name /bin/bash

示例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/whalesay

docker run docker/whalesay cowsay balabala
发布了23 篇原创文章 · 获赞 14 · 访问量 7万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章