Docker 安装与基本操作指令
一、Docker简介
1、Docker 是一个开源的应用容器引擎,基于GO语言 并遵循从apache2.0协议开源
2、Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux 机器上,也可以实现虚拟化。
3、容器是完全使用沙箱机制,相互之间不会有任何接口 (类似于手机的app),更重要的是容器性能开销极低
(沙箱是一个虚拟系统程序,沙箱提供的环境相对于每一个运行的程序都是独立的,而且不会对现有的系统产生影响,即沙箱提供一个限制该应用程序对系统资源的访问权限。)
4、docker可以在任何环境部署的原因:只要能装上docker-engine 引擎,就能使用; 它实现了docker环境的跨平台。
5、容器不依赖于系统,依赖于引擎
6、容器是一个应用层抽象;虚拟机(vm) 是一个物理硬件层抽象
例如,云服务提供通常采用虚拟机技术隔离不同的用户,而docker通常用于隔离不同的应用,比如,前段,后端以及数据库
二、Docker 与虚拟机的区别
Docker | 虚拟机 | |
占用资源 | 较少 | 较多 |
启动时间 | 毫秒级别 | 1-3分钟 |
安全 | 共享内核,不够安全 | 系统逻辑隔离,安全 |
服务 | 一个容器一般只跑一个服务 | 可以运行多个服务 |
是否装系统 | 不需要 | 需要 |
三、Docker 的使用场景
1、打包应用程序简化部署
2、可脱离底层硬件的任意迁移
四、DOCKER的核心概念及安装
1、Docker三要素
① 镜像,一个面向Docker容器引擎的只读模板
② 容器, 从镜像创建的运行实例
③仓库,集中部署镜像的地方;分公有和私有仓库
2、部署
yum -y install yum-utils device-mapper-persistent-data lvm2 #yum-utils提供了yum-config-manager #device mapper存储驱动程序需要device-mapper-persistent-data和lvm2 #device mapper是Linux2.6 内核中支持逻辑卷管理的通用设备映射机制,它为实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构。
设置阿里云的镜像资源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装Docker-CE
wget -P /etc/yum.repos.d http://mirrors.163.com/.help/CentOS7-Base-163.repo yum clean all yum makecache yum -y install docker-ce systemctl stop firewalld.service setenforce 0 vim /etc/selinux/config SELINUX=disabled sed -i '/^SELINUX=/s/enforcing/disabled/' /etc/selinux/config systemctl start docker.service systemctl enable docker.service
进行镜像加速
mkdir -p /etc/docker tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://27vtjya6.mirror.aliyuncs.com"] } EOF service network restart systemctl restart docker
五、Docker的基础命令
1、查看docker的版本
2、搜索nginx镜像(公有仓库)
3、下载nginx镜像
4、查看镜像列表
5、为镜像添加新标签
6、两个方式删除镜像
提醒:删除某一个镜像时,只要有容器在使用某一个镜像,必须先删除容器,才能删除镜像
1、删除镜像+签名 docker rmi nginx:web 2、删除镜像id 注意:只有当镜像id对应标签仅剩一个时,才能使用镜像id的方式进行删除;否则出现如下报错 或者也可以在最后加上-f选项,一次性删除 docker rmi bc9a0695f571 -f #最后加上-f可以一次性删除两个别名
7、存储镜像并命名为nginx,存到/opt目录下
docker save -o /opt/nginx nginx:latest
8、载入镜像
docker load < /opt/nginx
9、容器操作
①创建容器
[root@server1 ~]# docker create -it nginx:latest /bin/bash
1013ed6361bd38549c4365533b4a95ac17186c2a757911d5a670c08e918183f8
-i:让容器的标准输入保持打开 -t:让Docker分配一个伪终端
②查看容器的运行状态
docker ps -a -a:列出所有的容器,包括未运行的容器 Created:已创建 Up:运行中
③启动容器
[root@server1 ~]# docker start 1013ed6361bd #容器id
容器网络原理图
docker0:各个容器之间通信的网关
- 启动执行命令查看系统根目录
启动容器的流程
(1)docker pull centos --下载镜像 (2)docker create -it centos:latest /bin/bash (3)docker start d4a99affa677
- 通过run命令启动:(先去查找现有的镜像中有没有,没有先下载,再启动)
docker run centos:latest /usr/bin/bash -c ls /
执行完成会关闭,状态是Exited(容器可以做一次性的处理,处理完就释放资源,做到了最小成本控制)
- 容器持续在后台执行(通过执行死循环)
[root@server1 ~]# docker run -d centos:latest /bin/bash -c "while true;do echo hello;done" a05811ad3b1afde24386aa3dda357513c74538bc8efcc6b43cd7839311558a28 [root@server1 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a05811ad3b1a centos:latest "/bin/bash -c 'while…" 17 seconds ago Up 17 seconds y
使用 docker logs 容器id 命令,可以查看容器内的标准输出
- 终止容器运行
[root@server1 ~]# docker stop a05811ad3b1a
- 导出容器
[root@server1 ~]# docker export 056d2908800d > /opt/httpd_bak
- 导入容器(会生成镜像,而不会创建容器)
[root@server1 ~]# cat /opt/httpd_bak | docker import - httpd:bak
- 删除容器(容器必须为停止状态)
[root@server1 ~]# docker stop 67660b8a51d1 [root@server1 ~]# docker rm 67660b8a51d1
- 批量删除容器
docker ps -a | sed -n '2,$p' | awk '{print "docker rm "$1}' | bash
[root@server1 ~]# docker ps -a | sed -n '2,$p' | awk '{print "docker rm "$1}' docker rm 1013ed6361bd docker rm 80ed0f3215fb docker rm 056d2908800d