Docker安装
程序员文章站
2022-06-03 21:06:51
...
安装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
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