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)
相关推荐
蓝胖的四次元口袋2 小时前
Docker Compose多容器编排与Nginx集群实战
运维·nginx·docker compose
懂软件的胡子个哥2 小时前
微信 API 消息回调怎么设计,才能避免丢消息和重复处理
运维·微信·架构·wechatapi·个人微信号二次开发
吉甫作诵2 小时前
Redis 常用命令大全:11 大类命令速查手册
运维·数据库·redis·缓存·nosql
gospace3 小时前
【无标题】
go·gb28181·gowvp
Acrellea4 小时前
告别粗放式能耗管理!安科瑞EIOT平台助力产业园区智慧低碳运营
运维·安全·能源
Databuff4 小时前
五款主流 SSH 免费工具介绍
运维·ssh·运维开发
菜鸟学编程o4 小时前
Linux常见指令
linux·运维·服务器
pt10435 小时前
AIOps机器学习——当警报阈值被调高之后
运维·人工智能·自动化
迪康coolmu5 小时前
企业文件外发管控落地实践 —— 基于迪康端点安全一体化管理系统
运维·网络·经验分享·安全
我不会起名字3226 小时前
一天一道算法题(35):电话号码的字母组合
java·数据结构·后端·python·leetcode·go·回溯