一、镜像和容器之间的关系
镜像和容器之间的关系就像是面象对象中的类和对象的关系, 一个类可以实例化很多的对象,对象与对象之间又是独立的,互相不影响,改变了一个对象中的方法或者属性不会影响另外一个对象
二、docker服务相关命令
2.1、 查看docker版本
docker version
2.2、显示 Docker 系统信息,包括镜像和容器数
docker info
2.3、登陆到一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub
docker login docker login -u 用户名 -p 密码
判断是否登录成功,可以用docker info命令查看
2.4、退出登录
docker logout
三、镜像的学习
如果现有的镜像不满足自己的需求,有两种方式来制作自己的镜像, 一是更改现有的容器,并且提交镜像,二是通过Dockerfile来制作一个新的镜像
3.0、查看本地镜像
docker images docker images -a #查看所有的镜像
3.1、搜索镜像
#搜索nginx的镜像 docker search nginx
3.2、拉取镜像
docker pull nginx #获取最新的镜像 docker pull nginx:1.15 #获取指定版本的镜像
3.3、删除镜像
docker rmi hello-world #删除hello-world的镜像 docker rmi $(docker images -q) #删除所有镜像
3.4、保存和加载镜像
docker pull hello-world #先拉取一个镜像 docker save hello-world -o test.tar #将hello-world镜像保存成文件 docker rmi hello-wolrd #将默认的删除掉 docker load -i test.tar #导入文件 docker images hello-images #发现已经存在镜像
3.5、标记本地镜像,将其归入某一仓库
docker tag hello-world:latest luohua:v1 docker images luohua #发现已经标记成功
四、Dockfile
Dockerfile是一个包含用于组合映像的命令的文本文档。可以使用在命令行中调用任何命令。 Docker通过读取Dockerfile中的指令自动生成镜像。docker build命令用于从Dockerfile构建镜像。可以在docker build命令中使用-f标志指向文件系统中任何位置的Dockerfile。
4.1、Dockfile的基本结构
DockerFile分为四部分组成:基础镜像信、维护者信息、镜像操作指令和容器启动时执行指令。例如:
#第一行必须指令基于的基础镜像 From ubutu #维护者信息 MAINTAINER docker_user docker_user@mail.com #镜像的操作指令 RUN apt-get update && apt-get install -y ngnix RUN echo "\ndaemon off;">>/etc/ngnix/nignix.conf #容器启动时执行指令 CMD /usr/sbin/ngnix
4.2、From指令,指定基础镜像,所有的镜像必须都有一个基础镜像,一般基础镜像就是一个操作系统
语法: from <image> from <image>:<tag> 示例: from centos from centos:7
4.3、MAINTAINER 指令 ,维护者信息
MAINTAINER <name> 示例: MAINTAINER luohua MAINTAINER luohua@qq.com
4.4、RUN ,用于在镜像是执行的命令
语法1: RUN <command> 语法2: RUN ["executable", "param1", "param2"] 示例: RUN yum install httpd
4.5 ADD 将本地的文件添加到容器中,tar包会自动解压
语法: ADD <src> <dest> 示例: ADD test.txt /data #将宿主机的test.txt文件添加到容器/data目录里
4.6、WORKDIR , 设置工作目录,类似于cd
语法: WORKDIR /path/to/workdir 示例: WORKDIR /home #工作目录为home
4.7、EXPOSE 指定与外界交互的端口
语法: EXPOSE <port> 示例: EXPOSE 8080
4.8、CMD 容器启动时启动的命令
语法: CMD ["executable","param1","param2"] (执行可执行文件,优先) 示例: CMD ["/usr/bin/wc","--help"]
五、容器相关命令
5.1、列出本地容器
docker ps #显示正在运行的容器 docker ps -a #查看全部的容器 docker ps -n 5 #最近创建的5个容器 docker ps -a -q #显示全部的容器的id
5.2、创建一个新的容器并运行它
Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...] docker run hello-world docker run -it centos /bin/bash #创建centos镜像,并以交互式方式进入到容器中
-d 后台运行容器,并返回容器id
-t 为容器分配一个伪终端
-i 以交互式运行容器,通常配合-t使用
-p 端口映射 格式: 宿主机端口 容器端口 例子: -p 80:80
-h 指定容器的名称
-v 数据卷 通常来将容器的数据映射到宿主机上
--name 为容器指定一个名称 --name "testdb"
--link 容器互相连接
5.3、在运行中的容器中执行命令
Usage: docker exec [OPTIONS] CONTAINER COMMAND [ARG...] docker exec -it 57dd47c7cfa1 /bin/bash #进入交互式容器
5.4、连接到正在运行中的容器
Usage: docker attach [OPTIONS] CONTAINER docker attach 34343434 #示例
5.5、创建容器
Usage: docker create [OPTIONS] IMAGE [COMMAND] [ARG...] docker create -it --name test centos /bin/bash #创建镜像,返回镜像id docker start test #启动容器
5.6、启动、停止、重启容器
Usage: docker start [OPTIONS] CONTAINER [CONTAINER...] docker start -ai container #启动容器 docker stop container #停止容器 docker restart container #停止容器
-a 启动并执行容器
-i 附加容器的stdin
5.7、获取容器的元数据
Usage: docker inspect [OPTIONS] NAME|ID [NAME|ID...] docker inspect study #获取名称为study容器的元数据
5.8、查看容器中的进程
Usage: docker top CONTAINER [ps OPTIONS] docker top study #查看名称为study容器的进程
5.9、查看容器的日志
Usage: docker logs [OPTIONS] CONTAINER docker logs study docker logs --since="2018-08-08" --tail=10 mynginx #查看从2018月8号的最新10条记录
-f 实时查看日志
-since :显示某个开始时间的所有日志
--tail :仅列出最新N条容器日志
5.10、导出容器存档
Usage: docker export [OPTIONS] CONTAINER docker export -o study.tar study
5.11、从文档中导入镜像
Usage: docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]] docker import study.tar luohua2018/centos:v1
5.12、从容器中创建一个新的镜像
Usage: docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] docker commit -a "luohua" -m "this is test" luohua2018/apache:v1 docker images
5.13、将制作好的镜像提交到Docker Hub中,在推送之前一定要执行docker login, 也就是登录
docker login #输入用户名和密码之后在执行推送 docker push luohua2018/apache:v1
六、利用Dockerfile制作vue的镜像
6.1 编写Dockerfile文件
FROM node:8.4 MAINTAINER luohua RUN npm install -g cnpm --registry=https://registry.npm.taobao.org RUN cnpm install vue-cli@2.9.2 -g RUN mkdir /data WORKDIR /data EXPOSE 8080
6.2、构建镜像
docker build -t luohua2018/vue:v1 . docker images luohua2018/vue:v1 #如果有发现构建成功
6.3、利用刚才的镜像创建vue项目
docker run -v $PWD:/data -it luohua2018/vue:v1 vue init webpack test
6.4、安装依赖,如果在第一步执行了安装依赖,可略过此步骤
docker run -v $PWD:/data luohua2018/vue:v1 cnpm install
6.5、修改vue的配置文件
cd test vim config/index.js host: '0.0.0.0' #将host此选项改成0.0.0.0
6.6、运行开发环境
docker run -v $PWD:/data -d -p 8080:8080 luohua2018/vue:v1 cnpm run dev