自学内容网 自学内容网

Docker概述

Docker能干什么?

虚拟机技术:

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

容器化技术:

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

比较docker和虚拟机的不同

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

Docker安装

Docker的基本组成

在这里插入图片描述

镜像(image) :

docker镜像就好比是一个模板,可以通过这个模板来创建容器服务
通过镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)。

容器( container) :

Docker利用容器技术,独立运行一个或者一 个组应用,通过镜像来创建的。
目前就可以把这个容器理解为就是一个简易的linux系统

仓库( repository) :

仓库就是存放镜像的地方!
仓库分为公有仓库和私有仓库!
Docker Hub (默认是国外的)
阿里云…都有容器服务器(配置镜像加速! )

卸载旧版本

yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine

需要的安装包

yum install -y yum-utils

设置镜像的仓库

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:企业版

yum install docker-ce docker-ce-cli containerd.io

启动docker

systemctl start docker

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

docker version

在这里插入图片描述
测试hello world

docker run hello-world

在这里插入图片描述

在这里插入图片描述

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

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

卸载docker

# 卸载依赖
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常用命令

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

镜像命令

docker images查看所有本地的主机上的镜像
[root@kuangshen /]# docker images
REPOSITORYTAGIMAGE IDCREATEDSIZE
hello-worldlatestbf7 56fb1ae654 months ago13.3kB
#解释
REPOSI TORY镜像的仓库源
TAG镜像的标签
IMAGE ID 镜像的id
CREATED镜像的创建时间
SIZE镜像的大小
#可选项
-a,--a11#列出所有镜像
q,--quiet#只显示镜像的id

docker搜索镜像

[root@kuangshen /]# docker search mysq1

删除镜像

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

容器命令

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

docker pull centos 

新建容器并启动

docker run [可选参数] image

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

常用其他命令

后台启动容器

#命令 docker run -d 镜像名
[root@iZf8z7tecpe8xbz6kq9e3eZ ~]# docker run -d centos

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

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

查看日志

docker logs -f -t --tail

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

查看容器中进程信息

#命令 docker top 容器id

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

查看镜像的元数据

# 命令
docker inspect 容器id

进入当前正在运行的容器

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

#命令
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  devdocker-entrypoint.d  docker-entrypoint.sh  etchome  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 #进入容器正在执行的终端,不会启动新的进程

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

docker cp 容器id:容器内路径 目的的主机路径

部署Nginx

拉取nginx镜像

# docker pull nginx

查看是否拉取成功

# docker images

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

# docker run -d --name nginx的名字 -p 8080(对于服务器web的端口号):80(容器内部的地址,默认80)

原文地址:https://blog.csdn.net/qq_63730529/article/details/142235733

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!