Docker概述

Docker能干什么?

虚拟机技术:

  1. 资源占用十分多
  2. 冗余步骤多
  3. 启动很慢

容器化技术:

不是模拟的一个完整的操作系统,每一个项目可以和自己的运行环境打包形成一个镜像,每个容器之间互相隔离,互不影响。

比较docker和虚拟机的不同

  • 传统虚拟机,虚拟出一条硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件
  • 容器内的应用直接运行在宿主机,容i去没有自己的内核,也没有虚拟机的硬件,所有更加轻便
  • 每个容器都是互相隔离的,每个容器内都有一个属于自己的文件系统,互不影响

Docker安装

Docker的基本组成

镜像(image) :

docker镜像就好比是一个模板,可以通过这个模板来创建容器服务

通过镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)。

容器( container) :

Docker利用容器技术,独立运行一个或者一 个组应用,通过镜像来创建的。

目前就可以把这个容器理解为就是一个简易的linux系统

仓库( repository) :

仓库就是存放镜像的地方!

仓库分为公有仓库和私有仓库!

Docker Hub (默认是国外的)

阿里云...都有容器服务器(配置镜像加速! )

卸载旧版本

shell 复制代码
yum remove docker \
					docker-client \
					docker-client-latest \
					docker-common \
					docker-latest \
					docker-latest-logrotate \
					docker-logrotate \
					docker-engine

需要的安装包

shell 复制代码
yum install -y yum-utils

设置镜像的仓库

shell 复制代码
yum-config-manager \
	--add-repo \
	https://download.docker.com/linux/centos/docker-ce.repo #默认是从国外,速度非常慢!
# 推荐使用阿里云镜像:
yum-config-manager \
	--add-repo \
	https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装Docker相关的

docker-ce:社区版的;docker-ee:企业版

shell 复制代码
yum install docker-ce docker-ce-cli containerd.io

启动docker

复制代码
systemctl start docker

查看docker版本,判断是否安装成功

复制代码
docker version

测试hello world

复制代码
docker run hello-world

查看一下下载的这个 hello-world镜像

shell 复制代码
[root@iZf8z7tecpe8xbz6kq9e3eZ ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED       SIZE
hello-world   latest    feb5d9fea6a5   2 years ago   13.3kB

卸载docker

shell 复制代码
# 卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
# 删除资源
rm -rf /var/lib/docker
# /var/lib/docker docker的默认工作路径

底层原理

Docker是怎么工作的?

Docker是一个Client-Server结构的系统,Docker的守护进程运行在主机上。通过Socket从客户端访问!

DockerServer接受到Docker-Client的指令,就会执行这个命令!

Docker为什么比VM快?

  1. Docker有着比虚拟机更少的抽象层
  2. Docker利用的是宿主机的内核,vm需要的是Guest OS。

所以说,新建一个容器的时候,docker不需要像虚拟机一样重新加载一个操作系统内核,避免引导性的操作。

虚拟机是加载Guest OS,而docker是利用宿主机的操作系统,省略了这个复杂的过程。

Docker常用命令

shell 复制代码
docker version		#显示docker的版本信息
docker info			#显示docker的系统信息,包括镜像和容器的数量
docker 命令--he1p		#帮助命令

镜像命令

shell 复制代码
docker images查看所有本地的主机上的镜像
[root@kuangshen /]# docker images
REPOSITORY		TAG		IMAGE ID		CREATED			SIZE
hello-world		latest	bf7 56fb1ae65	4 months ago	13.3kB
#解释
REPOSI TORY		镜像的仓库源
TAG				镜像的标签
IMAGE ID 		镜像的id
CREATED			镜像的创建时间
SIZE			镜像的大小
#可选项
-a,--a11		#列出所有镜像
q,--quiet		#只显示镜像的id

docker搜索镜像

shell 复制代码
[root@kuangshen /]# docker search mysq1

删除镜像

shell 复制代码
docker rmi -f 容器id # 删除指定镜像
docker rmi -f 容器id 容器id 容器id 容器id# 删除多个镜像
docker rmi -f $(docker images -aq) # 删除全部的镜像

容器命令

说明:我们有了镜像才可以创建容器,linux下载一个centos镜像来测试学习

shell 复制代码
docker pull centos 

新建容器并启动

shell 复制代码
docker run [可选参数] image

# 参数说明
--name="Name"		容器名字 
--d					后台运行方式
-it					使用交互方式运行,进入容器查看内容
-p					指定容器端口 -p 8080:8080
	-p ip:主机端口:容器端口
	-p主机端口:容器端口(常用)
	-p容器端口
	容器端口
-P					随即指定端口

常用其他命令

后台启动容器

shell 复制代码
#命令 docker run -d 镜像名
[root@iZf8z7tecpe8xbz6kq9e3eZ ~]# docker run -d centos

#问题docker ps.发现centos停止了

#常见的坑:docker 容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止
#nginx,容器启动后,发现自己没有提供服务,就会立即停止,就是没有程序了

查看日志

shell 复制代码
docker logs -f -t --tail

#显示日志
-tf					#显示日志
--tail number 		#要显示的日志条数
[root@iZf8z7tecpe8xbz6kq9e3eZ ~]# docker logs -tf --tail 10 5d39721d830c

查看容器中进程信息

shell 复制代码
#命令 docker top 容器id

[root@iZf8z7tecpe8xbz6kq9e3eZ ~]# docker top 5d39721d830c
UID                 PID                 PPID                C                   STIME     
root                1355461             1355441             0                   Aug23     
101                 1355507             1355461             0                   Aug23     

查看镜像的元数据

shell 复制代码
# 命令
docker inspect 容器id

进入当前正在运行的容器

shell 复制代码
# 我们通常容器都是使用后台方式运行的,需要进入容器,修改一些配置

#命令
docker exec -it 容器id bashShell

#测试
[root@iZf8z7tecpe8xbz6kq9e3eZ ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED       STATUS       PORTS                                 NAMES
5d39721d830c   nginx     "/docker-entrypoint...."   11 days ago   Up 11 days   0.0.0.0:888->80/tcp, :::888->80/tcp   nginx
[root@iZf8z7tecpe8xbz6kq9e3eZ ~]# docker exec -it 5d39721d830c /bin/bash
root@5d39721d830c:/# 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  www

#方式二
docker attach 容器id
#测试
[root@iZf8z7tecpe8xbz6kq9e3eZ ~]# docker attach 5d39721d830c
正在执行当前的代码...

#区别
#docker exec 		#进入容器后开启一个新的终端,可以在里面操作
#docker attach 		#进入容器正在执行的终端,不会启动新的进程

从容器内拷贝文件到主机上

shell 复制代码
docker cp 容器id:容器内路径 目的的主机路径

部署Nginx

拉取nginx镜像

shell 复制代码
# docker pull nginx

查看是否拉取成功

shell 复制代码
# docker images

启动nginx(通过公网的3344端口可以访问到容器内部的80端口)

shell 复制代码
# docker run -d --name nginx的名字 -p 8080(对于服务器web的端口号):80(容器内部的地址,默认80)
相关推荐
lingran__2 分钟前
Linux 基础常用指令万字详解(上)|文件目录命令,结合底层原理剖析
linux·运维·服务器·后端·centos·linux基础指令
各类产品分享44 分钟前
电力行业AR智能运维哪个品牌好
运维·ar·ar巡检
他们叫我秃子1 小时前
前端开发转 Go 全栈(四):代码写在前面,却要最后执行?我终于搞懂了 defer
前端·后端·go
贾天佑忆月 迷失的昵1 小时前
客户端与服务器持续同步解析(轮询,comet,WebSocket)
运维·服务器·websocket
刘某的Cloud1 小时前
Galera Cluster mariadb 生产环境常见问题排查与运维指南
linux·运维·数据库·mariadb·集群高可用
雨辰AI1 小时前
K8s 国产数据库慢 SQL 自动监控|Prometheus+Grafana 可视化全落地
数据库·sql·安全·容器·kubernetes·grafana·prometheus
GGG7661 小时前
k8s的 Node and Cluster实战
容器·kubernetes
70asunflower1 小时前
Linux 性能排查分析完全教程
linux·运维
zhangfeng11332 小时前
宝塔8 升级到 11导致 服务器无法访问外网dns失效了,无法访问bt.cn 解决方法 测试通过
运维·服务器
半支烟隐 pzishuo3 小时前
Kubernetes Gateway API 完全指南
容器·kubernetes·gateway