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)
相关推荐
wowocpp18 分钟前
ubuntu 22.04 硬件配置 查看 显卡
linux·运维·ubuntu
萨格拉斯救世主39 分钟前
jenkins使用slave节点进行node打包报错问题处理
运维·jenkins
川石课堂软件测试1 小时前
性能测试|docker容器下搭建JMeter+Grafana+Influxdb监控可视化平台
运维·javascript·深度学习·jmeter·docker·容器·grafana
pk_xz1234562 小时前
Shell 脚本中变量和字符串的入门介绍
linux·运维·服务器
小珑也要变强2 小时前
Linux之sed命令详解
linux·运维·服务器
Lary_Rock5 小时前
RK3576 LINUX RKNN SDK 测试
linux·运维·服务器
昌sit!7 小时前
K8S node节点没有相应的pod镜像运行故障处理办法
云原生·容器·kubernetes
追风林8 小时前
mac 本地docker-mysql主从复制部署
mysql·macos·docker
一坨阿亮8 小时前
Linux 使用中的问题
linux·运维
A ?Charis10 小时前
Gitlab-runner running on Kubernetes - hostAliases
容器·kubernetes·gitlab