【Docker】快速入门手册
一文,保证docker丝滑快速入门。
目录
1.概述
Docker是一个开源的应用容器引擎。
Docker的理念类似于Windows的镜像系统:
原生的Windows系统拿到手以后要安装一系列的东西,如果每个人拿到手都要重新安装会很麻烦,可以一个人安好一份完整的以后做出镜像系统,其他人直接拿来就用。
Docker支持将安装好的软件编译打包成镜像,其他服务器直接拿镜像来运行就可以。
运行的一个镜像就是一个容器。
Docker主机(host):安装了docker程序的机器。(docker是直接安装在系统之上的)
Docker客户端(client):就是一个客户端程序,连接docker主机,通过命令行或者其他工具来进行操作。
Docker仓库(registry):用来保存各种打包好的docker镜像。
Docker镜像(image):打包好的软件。
Docker容器(container):镜像启动后的实例称为一个容器。每一个镜像运行一次就会产生一个容器。容器是独立运行的一个或者一组应用。
仓库、镜像、容器是docker的三大要素。
1.1.安装
Docker要求Linux的内核版本必须3.10
查看内核版本:uname –r
升级内核版本:yum update
安装docker依赖:yum install -y epel-release
安装docker:yum install docker
启动docker:systemctl start docker
停止docker: systemctl stop docker
查看docker版本号:docker –v
开机自启docker:systemctl enable docker
配置文件: etc/sysconfig/ 路径下名为docker的文件
1.2.阿里云镜像加速
1.3.运行原理
所有操作进程与守护进程打交道,守护进程负责创建一个个的docker容器来跑镜像。
2.常用操作
2.1.帮助命令
查看docker版本信息 docker version
查看docker详细信息 docker info
查看全部命令 docker --help
2.2.镜像操作
docker的镜像都存在 docker hub上面
查找全部镜像:
docker search 镜像名
查找超过某star数的镜像:
docker search 镜像名 -f stars=数量值
拉取镜像:
docker pull 镜像名 或者 docker pull 镜像名:tag(tag版本号,在hub上可以查找到)
不跟tag号,默认拉取latest版本。
查看当前操作系统中所有镜像:docker images
查看当前操作系统中的所有当前镜像的ID:image -q
显示当前操作系统中的所有镜像的ID:image -qa
删除镜像: docker rmi IMAGE ID(可以通过docker images看到)
删除镜像前要删除该镜像的所有容器,才能删除镜像成功。
2.3.容器操作
运行镜像就会产生一个容器
2.3.1创建、启动
1.创建容器
run命令会创建一个新的容器。
docker run [options] 镜像名 [command] arg
创建交互式容器:
交互式容器允许docker外的进程直接与docker内的容器进行交互
一般会it命令连用,给予交互式容器一个伪输入终端,以便进行交互。
创建后,会自动进入容器中的一个伪终端界面。
创建守护式容器:
守护式容器,即启动一根守护进程,docker外的进程不能直接与docker内的容器进行交互,而是通过守护进程交互,守护进程再与docker中的容器交互。
创建后,会打印容器ID,然后立即自杀!
原因是创建交互式进程的时候有个伪终端挂着,等待输入,使得容器一直处于一种被使用的状态,而守护式进程启动后,docker发现这个容器什么事儿都没做,因此直接kill掉。
2.启动容器
start命令会启动一个已有的容器。
docker start CONTAINER ID(可以通过docker ps-a命令查看)
2.3.2.退出、停止
退出容器
容器停止并退出:(在交互界面)exit
容器退出但不停止:ctrl+P+Q
停止容器
温柔停止(点关机键关机):
docker stop CONTAINER ID(可以通过docker ps-a命令查看)
强制停止(拔电源):
docker kill CONTAINER ID
2.3.3.进入交互式界面
docker attach 容器ID
2.3.4.守护式容器交互
在宿主机上使用:
docker exec -it 容器ID
-it会给出一个虚拟终端,但是此时不再是直接与容器交互。
而是通过exec指令与守护线程进行交互,守护进程再与容器进行交互。
2.3.5.查看
查看运行中的容器详细信息:docker ps
查看运行中的容器ID:docker ps -q
查看所有容器详细信息:docker ps -a
查看所有容器ID:docker ps -qa
2.3.6.删除
一般删除:
要求容器处于停止状态。
docker rm CONTAINER ID
强制删除:
可以强制删除运行状态中的容器
docker rm -f CONTAINER ID
删除多个容器:
2.3.7.拷贝
将容器内的文件拷贝到容器外的宿主机上:
3.容器数据卷
3.1.概述
类似于redis的RDB和AOF
数据卷,即将容器内部的数据持久化到宿主机上,也可以将宿主机上的数据同步进容器中来。两边同时维护数据卷,数据卷的改动,对两边都生效。
3.2.使用
docker run –it -v /宿主机绝对路径目录:/容器内目录 镜像名
文件夹不需要新建,执行该条指令后,会自动在宿主机、容器的对应路径下生成该文件夹。
4.数据卷容器
4.1.概述
类似于redis的主从复制。某个容器挂载数据卷,其他容器通过挂载这个卷容器实现数据共享,直接挂载数据卷的这个容器称为数据卷容器。
4.2.使用
挂载数据卷容器要配合dockerfile来实现,主要是要使用dockerfile在数据卷容器中编写脚本,在脚本中声明挂载的数据卷有哪些。然后将数据卷容器打包成镜像,要使用数据卷容器的其他容器创建容器的时候直接就使用数据卷容器的镜像,这样创建出来的子容器才会挂载数据卷容器成功。
主要是因为要声明,挂载的数据卷关系,否则,即使挂载了节点,也不会挂载到父容器的数据卷。
构建数据卷容器镜像:
dockerfile的内容为:
数据卷容器挂载数据卷:
其他容器挂载数据卷容器:
5.安装Mysql示例
docker run
-p 3306:3306
--name mysql01
-v /mysql/conf:/etc/mysql/config.d
-v /mysql/logs:/logs
-v /mysql/data:/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=admin
-d mysql:5.6
如果因为权限问题run失败,则加上--privileged=true来强制获得权限:
docker run -p 3306:3306 --name mysql01 --privileged=true -v /mysql/conf:/etc/mysql/config.d -v /mysql/logs:/logs -v /mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=admin -d mysql:5.6
处理navcat连接失败:
navcat连接的时候注意先关闭Linux的防火墙!!!
<1> docker start mysql 进入MySql
<2> docker ps -a 查出自己创建的container(容器)的ID
<3> docker exec -it 63c9e29aelef bash (每个人创建的container ID都不一样)
<4> mysql --user=root --password
<5> ALTER USER 'root' IDENTIFIED WITH mysql_native_password BY '1234567';
6.处理命令找不到
处理vi或者vim命令找不到:
apt-get update
apt-get install vim
7.DockerFile
dockerFile,用来构建Docker镜像的构建文件,是一个由一系列命令和参数构成的脚本。
构建一个Docker镜像分为三步:
- dockerFile
编写一个dockerFile
- docker build
执行docker build指令
- run
运行镜像
7.1.示例解析
dockerFile是以键值对的方式指定的一组命令参数,格式为:
命令 参数
命令后必须带单数,空命令不合法。
from scratch:
继承scratch镜像,scratch是基础镜像,所有镜像只有继承了scratch才会成为一个镜像,类似于JAVA中的Object类。
maintainer:
作者信息,大家约定的格式是作者+邮箱
ADD:
LABEL:
标签,关于镜像的一些详细信息。
CMD:
设置镜像进来后的路径在哪儿。
即docker run -it XXX后进来的路径
7.2.构建过程
docker镜像的构建过程,即dockerFile的从上到下执行。dockerFile从上到下执行,每一条指令都会创建一个新的镜像层,并对镜像进行提交,执行的效果就会是从一个基础镜像开始对镜像进行层层封装,最后包装出一个大的镜像来。
7.3.指令
FROM:
FROM,指定父镜像,可以是基础镜像,也可以是其他镜像,反正本质上一定会是继承自基础镜像。
MAINTAINER:
镜像维护者的姓名和邮箱。
RUN:
RUN,构建时候额外需要运行的命令,这条指令是当前平台的指令,遇到RUN指令就会运行RUN后面该条指令。入一条Linux指令或者Windows指令,一般是用来在当前平台做一些资源或者权限的操作,比如创建文件夹,给文件夹进行权限限定等操作。
EXPOSE:
该镜像对外暴露的端口号。
WORKDIR:
指定在创建容器后,终端登录进来的默认路径,
如指定 /data 终端登录进来就会是在/data路径下。
ENV:
用来设置环境变量。
ADD、COPY:
将一些资源加入镜像中,
ADD会加载后并解压,COPY只会加载。
VOLUME:
用来建里容器数据卷。
CMD、ENTRYPOINT:
用来指定容器启动时需要运行的命令,这条命令是指当前平台的命令,如Linux的指令或者Windows的指令。
CMD可以允许存在多个,但是后面的会覆盖前面的,也就是说只有最后一个才有效。
ENTRUPOINT可以运行存在多个,后面的会追加到前面的去,也就是说会叠加生效。
ONBUILD:
指定当前镜像被继承时所触发的动作。
7.4.案例分析
案例一
docker hub上存在一个精简版的centos镜像,该镜像中的centos只有内核,没有其余任何功能,可以通过编写dockerFile对其进行二次打包,为其增加vim功能和net-tools中的功能。
编写完dockerFile后,使用docker的build指令来构建镜像:
-f 指定dockerFile的位置,-t指定构建后的镜像的名称和路径 . 表示当前路径。
案例二
该案例使用centOS为父镜像,为其加入tomcat、JDK,构成一个tomcat镜像。
该案例主要是为了展示ADD、COPY的作用。
8.推送镜像
推送镜像的前提是镜像要运行起来,因为推送的时候要使用到镜像的容器来向远端仓库上进行推送。
docker的推送和git的推送很像,都是commit然后push
commit:
push:
更多推荐
所有评论(0)