docker学习笔记及常用命令

docker(在任何地方构建、发布并运行任何应用)

  • 安装前提
  • docker为什么会出现
  • 什么是docker
    • 链接地址
    • 安装docker
    • 配置docker仓库(阿里云镜像加速配置)
    • 运行docker(docker run)
  • docker运行的机制和原理
    • 镜像命令
    • 容器命令
    • 镜像原理
    • docker commit
    • 容器数据卷

说明:本帖资料来源于尚硅谷(周阳老师)视频课,命令汇总来源于评论区的“全村的希望”
视频地址:

https://www.bilibili.com/video/av27122140

安装前提

centos6.5(**-bit)+
3.6.32-431+
查看linux 版本:uname -r
docker学习笔记及常用命令_第1张图片

docker为什么会出现

开发将项目交给运维,运维工程师进行部署的时候经常因为环境的问题出现交付软件的部署问题。
为了解决这个问题的办法就是:
将环境和配置与项目一起打包给运维。
将环境和配置与项目一起打包为一个镜像,放到仓库,运维再从仓库的镜像制作出一个容器进行使用。
例子:买一条鱼,连着鱼缸一起端走,鱼就不会死掉。(代码与环境一起拿走,代码就不会崩溃)

什么是docker

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
一句话:docker解决了运行环境和配置问题的软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术(docker是一个精简的虚拟机)。
一个完整的Docker有以下几个部分组成:

  1. DockerClient客户端
  2. Docker Daemon守护进程
  3. Docker Image镜像
  4. DockerContainer容器

docker三要素:
①镜像
②仓库
③容器
docker学习笔记及常用命令_第2张图片

打包的项目(项目+环境+配置)成为镜像
镜像放在仓库(类似于gihub的一个地方)
试用docker去用镜像制作出一个个容器,再拿到宿主机安装使用
docker----小鲸鱼
大海-------宿主机
集装箱----一个个由镜像制作出来的容器

容器与镜像的关系:
docker学习笔记及常用命令_第3张图片
容器:
docker学习笔记及常用命令_第4张图片仓库
docker学习笔记及常用命令_第5张图片
总结:
docker学习笔记及常用命令_第6张图片
架构图:
docker学习笔记及常用命令_第7张图片

链接地址

docker国外官网:www.docker.com(防火墙)
中文官网:www.docker-cn.com
仓库官网:hub.docker.com(防火墙)

安装docker

centOS 6.8安装:
docker相关库文件:yum install -y epel-release
docker安装:yum install -y docker-io
安装后的配置文件:/etc/sysconfig/docker
启动docker后台服务:service docker start
验证是否安装成功:docker version

centOS 7安装(去官网):https://docs.docker.com/install/linux/docker-ce/centos/
1:安装所需的包

$ sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

2:使用以下命令设置稳定存储库

$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

3.启用nightly或测试存储库
//以下命令启用nightly存储库

$ sudo yum-config-manager --enable docker-ce-nightly

// 要启用测试通道,请运行以下命令:

  $ sudo yum-config-manager --enable docker-ce-test

您可以通过运行带有标志的命令来禁用每晚或测试存储库 。要重新启用它,请使用该标志。以下命令禁用nightly存储

  $ sudo yum-config-manager --disable docker-ce-nightly

4.启动docker

$sudo systemctl start docker

5.通过运行hello-world 映像验证是否正确安装了Docker CE

$ sudo docker run hello-world

配置docker仓库(阿里云镜像加速配置)

docker的仓库本应是hub.docker.com
但是有很恶心的防火墙,所以我们用阿里云(视频课中所给地址已失效):
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
进入后登录自己的淘宝账户获得自己的仓库地址:
docker学习笔记及常用命令_第8张图片
得到了专属的地址:https://36x65g1z.mirror.aliyuncs.com
使用命令:vim /etc/docker/daemon.json
然后将other_args:改为自己的专属仓库地址:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://36x65g1z.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

操作流程:
1、从远程仓库拉取镜像
2、把镜像实例成容器
3、运行容器
docker run hello-world:
本机中搜索hello-world镜像
如果镜像不存在,去仓库进行拉取,(如果仓库没有,则不存在)
拉取之后的镜像当做模板然后实例成容器进行运行

运行docker(docker run)

运行docker的某一个容器:
docker run xxx(如hello-world)
此命令就是用镜像制造出一个容器,先在本地找,本地没有就回去仓库找(默认会在后面加上:latest,即最新的一个)。
类似于:用类实例化出一个对象
run干了什么:
docker学习笔记及常用命令_第9张图片

docker运行的机制和原理

docker就是那只大鲸鱼,它比一般的虚拟机要快的原因是docker不需要有很多累赘的软硬件,docker的内核已经了有了,然后每一个集装箱(容器)都自带环境,所以它非常的轻便。

如何工作
hadoop、tomcat等都放在一个个集装箱上,我们通过客户端来操作守护进程:
docker学习笔记及常用命令_第10张图片
为什么比vm快?
docker学习笔记及常用命令_第11张图片
##帮助命令
docker版本:

docker version

docker详细信息:

docker info

docker帮助命令(类似于linux的man):

docker --help

镜像命令

列出本地所有镜像:

docker images

REPOSITORY:镜像仓库源
TAG:镜像标签
IMAGE ID:镜像ID
CREATE:创建时间
SIZE:镜像大小
列出本地所有镜像(包含中间镜像层):

docker images -a

只显示镜像ID:

docker images -q

根据名字去镜像库搜索镜像:

docker search 

拉取镜像:

docker pull tomcat 等价于 docker pull tomcat:latest(没有写版本号默认就是最新版)

删除镜像

docker rmi <-f 强制删除> 镜像ID

批量删除镜像

docker rmi -f 

删除所有镜像

docker rmi -f $(docker images -q)

容器命令

新建并启动容器:

docker run 【OPTIONS】 image 【COMMAND】【ARG...】

-d 后台运行

docker run  -d xxxx

这种后台运行有一个问题:
由于docker的机制问题,如果觉这个后台进程没事干,就会让它自杀,所以如果后台进程没事干,ps查不到。

-it 交互式运行(前台运行)

docker run -it xxx

上面这种交互式运行方式是最常用的!相当于从大海爬上鲸鱼背进到集装箱。
–name 给容器定义新名字
-i 交互模式运行容器
-t 为容器重新分配一个伪输入终端
列出当前正在运行的容器:docker ps
-a 当前正在运行和之前运行的
-l 上一次运行的
-n 3 上三次运行的
-q 编号

启动容器:

docker start 

停止容器:

docker stop 

重启容器:

docker restart

强制停止:

docker kill 

删除已停止的容器:

docker rm   

一次性删除多个容器:

docker rm -f$(docker ps -aq)

查看容器日志:

docker logs -f -t --tail 

-t 加入时间戳
-f 跟随最新的日志打印
–tail 数据显示最后多少条
以JSON 的方式查看容器内部细节:

docker inspect 

进入到正在运行的容器中:

docker attach 

在宿主机对容器进行操作:

docker exec xxx

退出程序后,使程序继续运行(出门不关灯):

ctrl + p + q

退出程序后,程序也停止运行(出门关灯):

exit

镜像原理

unionFS联合文件系统
docker镜像的基础就是此系统:
docker学习笔记及常用命令_第12张图片
docker的镜像加载原理:
docker学习笔记及常用命令_第13张图片为什么docker的centos比较小?
docker学习笔记及常用命令_第14张图片以pull为例,docker好像是在一层一层地下载
docker学习笔记及常用命令_第15张图片
下载一个tomcat为什么这么大??
原因是docker不止是你看到的tomcat而已,而是包含了所需的内核+环境(下面是tomcat的集装箱):
docker学习笔记及常用命令_第16张图片

docker commit

docker commit提交容器副本,使之成为一个新的镜像(操作类似于git commit),将新的镜像放在本地。

语法:

docker commit -m="提交的描述信息" -a="作者" 容器ID 命名空间/新的名字:[版本标签]

示例步骤:
①先在hub上下载一个镜像容器并运行(以tomcat举例)(前面的是对外暴露的端口)

docker run -it -p 8080:8888 tomcat

此处的小p是指定集装箱的tomcat的端口,如果用大P便是随机分配端口

②故意删掉上一步镜像所生产的tomcat的其中一个功能(此处以文档作为示例)

docker exec -it [容器ID] /bin/bash
ls -l
cd webapps
ls
rm -rf docs

此时再访问tomcat的时候就发现文档功能报错404,此tomcat已被我成功修改
③此时我们得到了一个没有文档功能的新的tomcat,此时我们以它为模板commit一个新的镜像。
我们为新的镜像命名为“ces/tomcat02”(此处的ces是命名空间)

 docker commit -m="comcat without docs" -a="lukaifang" xxx ces/tomcat02:1.2

④删掉原有的tomcat在重新下载tomcato2:1.2,就可以看到没有文档了!

容器数据卷

容器数据卷可以使本来保存在内存中的数据,不用commit断电之后依旧可以保存,类似于redis的rdb和aof文件
主要干容器间继承+共享数据数据持久化的操作
docker学习笔记及常用命令_第17张图片添加数据卷的方法:
①:直接用命令添加:

docker run -it -v/宿主机绝对路径目录:/容器内目录 镜像名

此命令的作用是:
在宿主机的根目录下建一个文件夹,同时在镜像容器的目录下也建一个文件夹,两个互相关联起来

此时再在宿主机执行(以json串的格式描述这个容器):

docker inspect 容器id

docker学习笔记及常用命令_第18张图片
可见,这两个文件已经绑定为一个卷(VolumesRW中的RW代表读写)

注意!!!此时,因为两个文件的绑定是读写,因此在任意一方进行读写,对方都会随之改变,以达到数据共享

②:DockerFile添加:

视频课暂时看到19课,暂时需要做其他事,之后继续完善本帖~************************

你可能感兴趣的:(docker)