细说docker第二篇

上一篇主要介绍了docker的两种安装方式,本篇主要介绍docker的三大基础组件,镜像、容器、仓库基础操作等,同时会利用dockerfile制作一个基于vue的前端镜像

一、镜像和容器之间的关系

镜像和容器之间的关系就像是面象对象中的类和对象的关系, 一个类可以实例化很多的对象,对象与对象之间又是独立的,互相不影响,改变了一个对象中的方法或者属性不会影响另外一个对象

二、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


相关推荐

  • 细说docker系列之集群swarm上篇

    从本篇正式开始,我们将接触docker的高级部分,也就是docker的集群,那么关于docker的集群方案也有很多, 我知道的有 kubernetes(k8s)...

    Border circle luohua 2020-07-19 15:51:45 0 0 31

  • 细说docker第三篇

    本篇来介绍docker的数据卷和网络相关

    Border circle luohua 2020-07-19 15:33:13 0 0 14

发表评论