Docker安装与基本命令

Docker概述

Docker是什么?

是一种轻量级的“虚拟机”
在Linux容器里运行应用的开源工具

Docker与虚拟机的区别
虚拟机

虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。

虚拟系统通过生成现有操作系统的全新虚拟镜像,它具有真实windows系统完全一样的功能,进入虚拟系统后,所有操作都是在这个全新的独立的虚拟系统里面进行,可以独立安装运行软件,保存数据,拥有自己的独立桌面,不会对真正的系统产生任何影响 ,而且具有能够在现有系统与虚拟镜像之间灵活切换的一类操作系统。虚拟系统和传统的虚拟机(Parallels Desktop ,Vmware,VirtualBox,Virtual pc)不同在于:虚拟系统不会降低电脑的性能,启动虚拟系统不需要像启动windows系统那样耗费时间,运行程序更加方便快捷;虚拟系统只能模拟和现有操作系统相同的环境,而虚拟机则可以模拟出其他种类的操作系统;而且虚拟机需要模拟底层的硬件指令,所以在应用程序运行速度上比虚拟系统慢得多。

Docker的使用场景

Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入Docker中进行管理。方便快捷已经是 Docker的最大优势,过去需要用数天乃至数周的 任务,在Docker容器的处理下,只需要数秒就能完成。
如果你有选择恐惧症,还是资深患者。Docker 帮你 打包你的纠结!比如 Docker 镜像;Docker 镜像中包含了运行环境和配置,所以 Docker 可以简化部署多种应用实例工作。比如 Web 应用、后台应用、数据库应用、大数据应用比如 Hadoop 集群、消息队列等等都可以打包成一个镜像部署。
云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker 改变了高性能必然高价格的思维定势。Docker 与云的结合,让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式。

总结
Docker 相比于传统虚拟化方式具有更多的优势:

Docker 启动快速属于秒级别。虚拟机通常需要几分钟去启动。
Docker 需要的资源更少。Docker 在操作系统级别进行虚拟化,Docker 容器和内核交互,几乎没有性能损耗,性能优于通过Hypervisor 层与内核层的虚拟化。
Docker 更轻量。Docker 的架构可以共用一个内核与共享应用程序库,所占内存极小。同样的硬件环境,Docker运行的镜像数远多于虚拟机数量,对系统的利用率非常高。
虚拟机可以通过镜像实现环境交付的一致性,但镜像分发无法体系化。Docker  Dockerfile 中记录了容器构建过程,可在集群中实现快速分发和快速部署。
高可用和可恢复性。Docker 对业务的高可用支持是通过快速重新部署实现的。

在这里插入图片描述

特点:

服务彼此之间相互独立  服务间的解耦   解耦:便于管理,防止数据过多积累在一个文件中                    
服务可以灵活迁移(跨平台)docker引擎  即docker-ce环境

Docker的使用场景

打包应用程序简化部署 (镜像)
可脱离底层硬件任意迁移
例:服务器从腾讯云迁移到阿里·

Docker核心概念

镜像

—个面向Docker容器引擎的只读模板

容器

从镜像创建的运行实例

仓库

集中保存镜像的地方

CentOS安装Docker的两种方式

使用YUM仓库来安装Docker
使用CURL获得Docker的安装脚本进行安装

安装19版Docker-CE

安装之前的操作

关闭防火墙,核心防护
iptables -F
seteforce 0

将backup文件与local.repo做调换

[root@server1 ~]# ls /etc/yum.repos.d/   
backup  local.repo
[root@server1 ~]# cd /etc/yum.repos.d/
[root@server1 yum.repos.d]# mv local.repo backup/
[root@server1 yum.repos.d]# cd backup/
[root@server1 backup]# mv C* ..
[root@server1 backup]# cd ..
[root@server1 yum.repos.d]# ll
总用量 28
drwxr-xr-x. 2 root root   24 11 27 18:37 backup
-rw-r--r--. 1 root root 1664 8  30 2017 CentOS-Base.repo
-rw-r--r--. 1 root root 1309 8  30 2017 CentOS-CR.repo
-rw-r--r--. 1 root root  649 8  30 2017 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root  314 8  30 2017 CentOS-fasttrack.repo
-rw-r--r--. 1 root root  630 8  30 2017 CentOS-Media.repo
-rw-r--r--. 1 root root 1331 8  30 2017 CentOS-Sources.repo
-rw-r--r--. 1 root root 3830 8  30 2017 CentOS-Vault.repo

情况yum源,手动建立缓存
[root@server1 yum.repos.d]# yum clean all
[root@server1 yum.repos.d]# yum makecache
//需要查看是否安装阿里云的配置文件的容器(centos基本的镜像源即CentOS-Base.repo,需要存放在/etc/yum.repos.d/下,即使放在内部目录里面也会照成下载失败的原因)

安装依赖包

[root@server1 ~]# yum install -y 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  //https:后是阿里云镜像的地址

安装完成之后查看是否存在(即docker-ce.repo)
[root@server1 ~]# ls /etc/yum.repos.d/
backup            CentOS-CR.repo         CentOS-fasttrack.repo  CentOS-Sources.repo  docker-ce.repo
CentOS-Base.repo  CentOS-Debuginfo.repo  CentOS-Media.repo      CentOS-Vault.repo

安装docker-ce并设置环境

[root@server1 ~]# yum install docker-ce -y
[root@server1 ~]# systemctl start docker  开启服务
[root@server1 ~]# systemctl status docker 查看服务状态是否为running
[root@server1 ~]# ifconfig  查看到生成一个容器地址(桥接网口)充当使用容器的网关
docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
附加(lo:回环口(测试TCP/IP是否生效))(virbr0:桥接网口)

镜像加速

[root@server1 ~]# cd /etc/docker/
[root@server1 docker]# ls
key.json
[root@server1 docker]# tee /etc/docker/daemon.json <<-'EOF'
> {
>   "registry-mirrors": ["https://e5rtts40.mirror.aliyuncs.com"]
> }
> EOF

寻找镜像加速码

百度搜索阿里云  进入阿里云搜索镜像加速  官方镜像加速 - 容器镜像服务 ACR   最下方出现容器镜像服务ACR(点击)
出现下图

在这里插入图片描述
点击管理控制台
在这里插入图片描述
系统参数的重载

[root@server1 docker]# systemctl daemon-reload 
[root@server1 docker]# systemctl restart docker

网络优化

[root@server1 docker]# vim /etc/sysctl.conf 
net.ipv4.ip_forward=1
[root@server1 docker]# sysctl -p //使其生效
net.ipv4.ip_forward = 1

重启网络服务和容器

[root@server1 docker]# service network restart 
Restarting network (via systemctl):                        [  确定  ]
[root@server1 docker]# systemctl restart docker

查看docker版本(go语言开发的)

[root@server1 docker]# docker version 

Docker基础命令

镜像操作

搜索镜像

[root@server1 ~]# docker search nginx //搜索所有的nginx镜像

[root@server1 ~]# docker images //搜索本地的所有镜像(因为没有创建,故没有)
REPOSITORY(镜像仓库)          TAG   (标签)              IMAGE ID     (镜像ID)       CREATED  (创建时间)           SIZE(大小)

下载镜像(存放地址为/var/lib/docker)

[root@server1docker]# docker pull nginx  //下载nginx镜像
[root@server1 docker]# docker pull tomcat //下载tomcat镜像
附加:AUFS(联合文件系统)若干层下载
下载后存放在/var/lib/docker
下载文件信息/var/lib/docker/image/overlay/repositories.json

删除镜像(两种方法)

删除镜像ID 
删除镜像名称(建议删除镜像名称)
[root@server1 docker]# docker images //查看所有镜像信息
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              bc9a0695f571        3 days ago          133MB
tomcat              latest              e0bd8b34b4ea        8 days ago          649MB
[root@server1 docker]# docker rmi e0bd8b34b4ea //删除镜像(以删除镜像ID的方式)

给镜像设置有效的标签

[root@server1 docker]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              bc9a0695f571        3 days ago          133MB
[root@server1 docker]# docker inspect bc9a0695f571 //查看镜像详细信息
[root@server1 docker]# docker tag nginx:latest nginx:web//设置标签
[root@server1 docker]# docker images 
 REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              bc9a0695f571        3 days ago          133MB
nginx               web                 bc9a0695f571        3 days ago          133MB
[root@server1 docker]# docker rmi bc9a0695f571 //此时发现通过删除ID无法删除镜像,此时只能删除名称,再通过删除ID或名称来删除镜像(如果镜像有许多标签,只能先删除标签,在删除镜像)
Error response from daemon: conflict: unable to delete bc9a0695f571 (must be forced) - image is referenced in multiple repositories

[root@server1 docker]# docker rmi nginx:latest  //删除名称,但镜像仍然存在
Untagged: nginx:latest
[root@server1 docker]# docker images 
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               web                 bc9a0695f571        3 days ago          133 MB 

删除镜像id(注意:只有当镜像id对应标签仅剩一个时,才能使用镜像id的方式进行删除;否则出现如下报错
或者也可以在最后加上-f选项,一次性删除)
附加:删除某一个镜像时,若容器在使用某一个镜像,必须先删除容器,才能删除镜像

删除所有镜像

 docker rmi `docker images -q`

载出镜像命名为nginx存在当前目录下

[root@server1 docker]# ls /opt/
containerd  rh
[root@server1 docker]# docker save -o /opt/nginx nginx:web 
[root@server1 docker]# ls /opt/
containerd  nginx  rh

载入镜像

将导出的nginx文件重新载入
[root@server1 docker]# docker rmi bc9a0695f571   //删除nginx镜像
[root@server1 docker]# docker load < /opt/nginx  //将opt目录中的nginx文件载入回来(本地导入不需要经过仓库)
[root@server1 docker]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               web                 bc9a0695f571        3 days ago          133MB

上传镜像(共有仓库涉及到翻墙,这里使用私有仓库)

docker push 仓库名称[:标签]

容器操作

创建容器
[root@server1 docker]# docker create -it nginx:web /bin/bash
bf66153d34a5b2e9efef0ea9802bf966494a39582d37dd395e42036ab6f2d2b9 //容器ID号
-i 让容器的标准输入保持打开
-t 让Docket分配一个伪终端

查看容器

[root@server1 docker]# docker ps 查看运行的容器
[root@server1 docker]# docker ps -a 查看所有的容器
CONTAINER ID (容器ID)       IMAGE(使用的镜像)               COMMAND (指令)            CREATED  (创建时间)           STATUS   (状态)           PORTS    (端口)           NAMES(其他的描述信息)
[root@server1 docker]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
bf66153d34a5        nginx:web           "/docker-entrypoint.…"   48 seconds ago      Created                                 hopeful
附加:Created创建状态  UP:运行状态

启动容器

[root@server1 docker]# docker start bf66153d34a5  
bf66153d34a5(容器ID)

通过run命令启动:
下载没有的镜像,再启动

[root@server1 docker]# docker pull centos:7 //下载centos7系统镜像
[root@server1 docker]# docker run -itd centos:7 /bin/bash  //创建容器
此时不需要启动 (创建,启动一体化) d:表示支持它一直开启

进入容器

[root@server1 docker]# docker exec -it 7ff5b22b24cc /bin/bash 
[root@7ff5b22b24cc /]# ls
anaconda-post.log  bin  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@7ff5b22b24cc /]# ifconfig  //发现无法查询ip地址,此时需要安装该软件
bash: ifconfig: command not found
[root@7ff5b22b24cc /]# yum install net-tools -y
[root@7ff5b22b24cc /]# ifconfig 
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.3  netmask 255.255.0.0  broadcast 172.17.255.255

查看容器所有的根目录

[root@server1 docker]# docker run nginx:web /bin/bash -c ls /
bin
boot
dev
docker-entrypoint.d
docker-entrypoint.sh
etc
home
lib
lib64
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var

[root@server1 docker]# docker ps -a  //此时该容器的状态为退出的(执行完操作后自动释放)
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
12a0ba536dc9        nginx:web           "/docker-entrypoint.…"   36 seconds ago      Exited (0) 36 seconds ago                       gracious_sanderson
7ff5b22b24cc        centos:7            "/bin/bash"              22 minutes ago      Up 22 minutes                                   distracted_gagarin
bf66153d34a5        nginx:web           "/docker-entrypoint.…"   32 minutes ago      Up 29 minutes               80/tcp   
注意:返回的状态码为0(正常) 异常的状态码为非0值:如下
执行完成会关闭,状态是Exited(容器可以做一次性的处理,处理完就释放资源,做到了最小成本控制

删除centos 7的容器(运行中的容器不能直接关闭,要先停止该容器,在进行删除)

[root@server1 docker]# docker rm 7ff5b22b24cc
Error response from daemon: You cannot remove a running container 7ff5b22b24cc4c989e1c15cb0b3c6eb0d55f5238410936ee0dc0ba8d2d7a2738. Stop the container before attempting removal or force remove

[root@server1 docker]# docker stop 7ff5b22b24cc
7ff5b22b24cc
此时强制退出属于异常退出
[root@server1 docker]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS               NAMES
12a0ba536dc9        nginx:web           "/docker-entrypoint.…"   6 minutes ago       Exited (0) 6 minutes ago                          gracious_sanderson
7ff5b22b24cc        centos:7            "/bin/bash"              28 minutes ago      Exited (137) 20 seconds ago                       distracted_gagarin
bf66153d34a5        nginx:web           "/docker-entrypoint.…"   38 minutes ago      Up 36 minutes                 80/tcp  

删除容器(先停止容器,再进行删除)

[root@server1 docker]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
12a0ba536dc9        nginx:web           "/docker-entrypoint.…"   17 minutes ago      Exited (0) 17 minutes ago                       gracious_sand
bf66153d34a5        nginx:web           "/docker-entrypoint.…"   49 minutes ago      Up 47 minutes               80/tcp              hopeful_thomp
[root@server1 docker]# docker stop bf66153d34a5
bf66153d34a5
[root@server1 docker]# docker rm 12a0ba536dc9
12a0ba536dc9
[root@server1 docker]# docker rm bf66153d34a5
bf66153d34a5
[root@server1 docker]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

容器持续在后台执行(通过执行死循环)

[root@server1 yum.repos.d]# docker run -d centos:7 /bin/bash -c "while true;do echo hello;done" 65f63938c9eae1eebe14ca1eb517f4d504ae8592f4f21113074e95673b3cea3f
[root@server1 yum.repos.d]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS               NAMES
65f63938c9ea        centos:7            "/bin/bash -c 'while…"   5 seconds ago       Up 3 seconds                                   clever_ptolemy

使用 docker logs 容器id 命令,可以查看容器内的标准输出

退出容器

exit

容器导出

[root@server1 docker]# docker export bf66153d34a5  > /opt/nginx_c
[root@server1 docker]# ls /opt/
containerd  nginx  nginx_c  rh

容器导入(会生成镜像,而不会创建容器)

[root@server1 docker]# cd /opt/
[root@server1 opt]# cat nginx_c | docker import - nginx:web
sha256:223f60a15338593e82c4f995e5352c1f82e97e3f5987af7857e878eb2467e7d9
发现只生成镜像,没有创建容器
[root@server1 opt]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@server1 opt]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               web                 223f60a15338        37 seconds ago      131MB
[root@server1 docker]# docker run -itd centos:7 /bin/bash (当创建没有该镜像的容器时,会先下载镜像,在创建容器)

批量删除容器(删除的是退出状态的容器,run状态的容器不会被删除)

[root@server1 docker]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                      PORTS               NAMES
6119a2c84d79        tomcat:latest       "/bin/bash"         About a minute ago   Created                                         hopeful_cohen
0579f5f82117        nginx:web           "/bin/bash"         17 minutes ago       Exited (0) 30 seconds ago                       xenodochial_ellis
4c0c03d915f9        nginx:web           "/bin/bash"         18 minutes ago       Created                                         graciou
[root@server1 docker]# docker ps -a | awk '{print "docker rm "$1}' | bash
Error: No such container: CONTAINER
6119a2c84d79
0579f5f82117
4c0c03d915f9
[root@server1 docker]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

删除容器(容器必须为停止状态)

 删除所有容器
 docker rm `docker ps -a -q`
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值