docker概述、安装、常用命令

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: docker概述、安装、常用命令

一、概述

1、docker

之前在服务器配置一个应用的运行环境,要安装各种软件,就拿一个基本的工程项目的环境来说吧, Java/Tomcat/MySQL/JDBC驱动包等。安装和配置这些东西有多麻烦就不说了,它还不能跨平台。假如 我们是在 Windows 上安装的这些环境,到了 Linux 又得重新装。况且就算不跨操作系统,换另一台同 样操作系统的服务器,要移植应用也是非常麻烦的。

通过Docker镜像 ( images ) 将 应用程序所需要的系统环境,由下而上打包,达到应用程序跨平台间的无缝接轨运作。

Docker官网:Home - Docker

Docker中文网站:https://www.docker-cn.com

Docker Hub官网:Docker Hub (仓库)

2、和虚拟机区别

  • 传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程
  • 而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。 因此容器要比传统虚拟机更为轻便。
  • 每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资 源。

比vm快的原因

1、docker有着比虚拟机更少的抽象层。由亍docker不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上docker将会在效率上有明显优势。

2、docker利用的是宿主机的内核,而不需要Guest OS。因此,当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。仍而避免引寻、加载操作系统内核返个比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载Guest OS,返个新建过程是分钟级别的。而docker由于直接利用宿主机的操作系统,则省略了返个过程,因此新建一个docker容器只需要几秒钟。

3、docker架构

  • 镜像(image):Docker镜像(Image)是一个只读的模板。镜像可以用来创建Docker容器,一个镜像可以创建很多容器。例如tomcat镜像可以创建tomcat1容器和tomcat2容器,容器与镜像的关系类似于面向对象编程中的对象与类;
  • 容器(container):Docker利用容器(Container)独立运行的一个或一组应用。容器是用镜像创建的运行实例,容器可以被启动、开始,停止、删除,每个容器都是互相隔离,保证安全的平台,可以把容器看做是一个精简版的Linux环境和运行在其中的应用程序
  • 仓库(repository):集中存放镜像文件的场所。仓库和仓库注册服务器是有区别的,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。仓库分为公开仓库(Public)和私有仓库(Private)两种格式,最大的公共仓库是Docker Hub,其他的仓库包括国内的阿里云、网易云等;

总结

  • Docker 本身是一个容器运行载体或称之为管理引擎。我们把应用程序和配置依赖打包好形成一个 可交付的运行环境,这个打包好的运行环境就似乎 image镜像文件。只有通过这个镜像文件才能生 成 Docker 容器。
  • image 文件可以看作是容器的模板。Docker 根据 image 文件生成容器的实例。 同一个 image 文件,可以生成多个同时运行的容器实例。 image 文件生成的容器实例,本身也是一个文件,称为镜像文件。
  • 一个容器运行一种服务,当我们需要的时候,就可以通过docker客户端创建一个对应的运行实例, 也就是我们的容器
  • 至于仓库,就是放了一堆镜像的地方,我们可以把镜像发布到仓库中,需要的时候从仓库中拉下来 就可以了。

二、docker安装

1、安装

说明centos6和centos7安装步骤不同,Docker 运行在 CentOS 7 上,要求系统为64位、系统内核版本为 3.10 以上

[root@izj6c22bffydfp7tlrbx7fz /]# uname -r

3.10.0-514.26.2.el7.x86_64

[root@izj6c22bffydfp7tlrbx7fz /]# cat /etc/os-release

NAME="CentOS Linux"

VERSION="7 (Core)"

ID="centos"

ID_LIKE="rhel fedora"

VERSION_ID="7"

PRETTY_NAME="CentOS Linux 7 (Core)"

ANSI_COLOR="0;31"

CPE_NAME="cpe:/o:centos:centos:7"

HOME_URL="https://www.centos.org/"

BUG_REPORT_URL="https://bugs.centos.org/"


CENTOS_MANTISBT_PROJECT="CentOS-7"

CENTOS_MANTISBT_PROJECT_VERSION="7"

REDHAT_SUPPORT_PRODUCT="centos"

REDHAT_SUPPORT_PRODUCT_VERSION="7"


[root@izj6c22bffydfp7tlrbx7fz /]#

查看gcc如果提示未找到命令即表示没有安装,需要安装

yum -y install gcc

yum -y install gcc-c++

卸载旧版本

yum remove docker \

                 docker-client \

                 docker-client-latest \

                 docker-common \

                 docker-latest \

                 docker-latest-logrotate \

                 docker-logrotate \

                 docker-engine

安装需要的软件包

yum install -y yum-utils

设置镜像仓库(说明安装docker不需要再opt或者其他目录下 直接在~下执行命令即可)

# 错误的地址 不要使用国外镜像地址

yum-config-manager --add-repohttps://download.docker.com/linux/centos/docker-ce.repo

[Errno 14] curl TCP connection reset by peer

[Errno 12] curl#35 - Timeout



# 正确推荐使用国内的

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

更新yum软件包索引

yum makecache fast

安装 Docker CE(ce社区版本 ee是付费版本)

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


如果安装指定版本 使用以下命令

yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io

启动docker 以及版本查看

systemctl start docker

docker version

运行一个hello-world镜像并查看

docker run hello-world

docker images

2、卸载

systemctl stop docker

yum -y remove docker-ce docker-ce-cli containerd.io

rm-rf /var/lib/docker

3、配置国内的镜像加速服务(阿里云 网易云等)这里选择阿里云

登录阿里云 找到容器镜像服务

选择对应的版本配置

执行命令上面的四条命令即可

4、hello-word运行过程

启动hello-world

5、docker运行原理

Docker是一个Client-Server结构的系统,Docker守护进程运行在主机上,然后通过Socket连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器。容器,是一个运行时环境,就是我们前面说到的集装箱。

三、常用命令

1、帮助命令

docker version   # 显示 Docker 版本信息。

docker info      # 显示 Docker 系统信息,包括镜像和容器数。。

docker --help# 帮助

docker命令查看

地址

Reference documentation | Docker Documentation

2、镜像命令

2.1、查看镜像

docker images

  可加参数选项 -a 、-q 、 -aq

  docker images -a

  docker images -a

  docker images -aq

 

 

2.2、搜索镜像 docker search 某个镜像的名称对应DockerHub仓库中的镜像

docker search mysql

 可加参数

   --filter=stars=50:列出收藏数不小于指定值的镜像

2.3、下载镜像  

docker pull mysql   #不写tag,默认是latest

docker pull mysql:5.7  #下载指定版本

 

2.4、删除镜像

docker rmi -f镜像id                          # 删除单个

docker rmi -f镜像名:tag 镜像名:tag            # 删除多个

docker rmi -f$(docker images -qa)        # 删除全部

3、容器命令

说明:有镜像才能创建容器,我们这里使用 centos 的镜像来测试,就是虚拟一个 centos !

先下载镜像

docker pull centos

3.1、新建并启动容器

1、以镜像新建一个容器并启动

docker run [OPTIONS] IMAGE [COMMAND][ARG..

可选参数

  --name="Name"# 给容器指定一个名字

  -d# 后台方式运行容器,并返回容器的id!

  -i# 以交互模式运行容器,通过和 -t 一起使用

  -t# 给容器重新分配一个终端,通常和 -i 一起使用

  -P# 随机端口映射(大写)

  -p# 指定端口映射,小写的时候一般可以有四种写法  

    ip:hostPort:containerPort  

    ip::containerPort  

    hostPort:containerPort (常用)  主机端口:容器端口

    containerPor

如下已经启动了一个新的centos系统,使用centos进行用交互模式启动容器,在容器内执行/bin/bash命令!

docker run -it centos /bin/bash

命令行已经切换到容器内

[root@8c070855da83 /]# ls

bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

3.2、查询容器

docker ps [OPTIONS]#

常用参数说明

  -a# 列出当前所有正在运行的容器 + 历史运行过的容器

  -l# 显示最近创建的容器

  -n=?    # 显示最近n个创建的容器

  -q# 静默模式,只显示容器编号。

3.3、退出

exit# 容器停止退出

ctrl+P+Q     # 容器不停止退出

3.4、启动和停止容器

docker start (容器id or 容器名)        # 启动容器

docker restart (容器id or 容器名)      # 重启容器

docker stop (容器id or 容器名)         # 停止容器

docker kill (容器id or 容器名)         # 强制停止容器

3.4、删除容器

docker rm容器id   # 删除指定容器

docker rm-f$(docker ps -a -q) # 删除所有容器

docker ps-a-q|xargs docker rm # 删除所有容器

4、其他命令

4.1、后台启动容器

# 命令

docker run -d容器名

# 例子

docker run -d centos # 启动centos,使用后台方式启动

# 问题:使用docker ps 查看,发现容器已经退出了!

# 解释:Docker容器后台运行,就必须有一个前台进程,容器运行的命令如果不是那些一直挂起的命令,就会自动退出。# 比如,你运行了nginx服务,但是docker前台没有运行应用,这种情况下,容器启动后,会立即自杀,因为他觉得没有程序了,所以最好的情况是,将你的应用使用前台进程的方式运行启动。

4.2、查看日志

docker logs -f-t--tail容器id

-t 显示时间戳

-f 打印最新的日志

--tail 数字显示多少条!

docker logs -tf --tail 10 c8530dbbe3b

4.3、查看容器中运行的进程信息,支持 ps 命令参数

# 命令

docker top容器id

# 测试

[root@root ~]# docker top c8530dbbe3

4.4、查看容器/镜像的元数据

4.5、进入正在运行的容器

# 命令1

docker exec -it容器id bashShell

测试

docker exec -it c8530dbbe3b4 /bin/bash


# 命令2

docker attach 容器id

测试

docker attach -it c8530dbbe3b4 /bin/bash


# 区别

# exec   是在容器中打开新的终端,并且可以启动新的进程

# attach 直接进入容器启动命令的终端,不会启动新的进程

4.6、进入正在运行的容器从容器内拷贝文件到主机上

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

测试

docker cp c8530dbbe3b4:/home/f1 /home

4.7、查看容器的cpu内存和网络状态

docker stats 容器id

5、案例

5.1、使用docker安装nginx

某个镜像的使用方法可以直接在dockerhub里面搜索查看

1、搜索镜像

docker search nginx --filter=stars=3000


2、拉取镜像

docker pull nginx


3、以镜像nginx新建后台启动容器 并且容器名定义为nginx01(默认nginx) 并且映射主机端口为3999

docker run -d --name nginx01 -p 3999:80 nginx

 

3、测试访问

curl localhost:3999


5、进入容器

[root@izj6c22bffydfp7tlrbx7fz /]# docker exec -it nginx01 /bin/bash

root@4384a8501bb0:/# whereis nginx 寻找nginx

nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx

root@4384a8501bb0:/#

5.2、使用docker安装tomcat

# 1、下载tomcat镜像

docker pull tomcat#

2、启动

docker run -d-p8080:8080 --name tomcat9 tomcat

# 3、进入

tomcatdocker exec -it tomcat9 /bin/bash#

4、思考:我们以后要部署项目,还需要进入容器中,是不是十分麻烦,要是有一种技术,可以将容器内和我们Linux进行映射挂载就好了?我们后面会将数据卷技术来进行挂载操作,也是一个核心内容,这里大家先听听名词就好,我们很快就会讲到!


5.3、使用docker安装 es + kibana

# 我们启动es这种容器需要考虑几个问题1、端口暴露问题9200、93002、数据卷的挂载问题 data、plugins、conf3、吃内存-"ES_JAVA_OPTS=-Xms512m -Xmx512m"# 扩展命令docker stats 容器id    # 查看容器的cpu内存和网络状态# 1、启动es测试docker run -d--name elasticsearch -p9200:9200 -p9300:9300 -e"discovery.type=single-node" elasticsearch:7.6.2# 2、启动之后很卡,使用 docker stats 容器id 查看下cpu状态,发现占用的很大CONTAINER ID        NAME                CPU %               MEM USAGE /LIMIT     MEM %          249ae46da625        elasticsearch       0.00%               1.036GiB /1.716GiB   60.37%    # 3、测试访问[root@kuangshen data]# curl localhost:9200{"name" : "249ae46da625","cluster_name" : "docker-cluster","cluster_uuid" : "_Ho_i4fOTUesNc_II35sSA","version" : {"number" : "7.6.2","build_flavor" : "default","build_type" : "docker","build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f","build_date" : "2020-03-26T06:34:37.794943Z",

6、可视化

6.1、概述

  1. Portainer(先用这个)
  2. Rancher(CI/CD再用这个)

持续集成和发布的时候用

#安装rancher-server

docker run --name rancher-server -p 8000:8080 -v

/etc/localtime:/etc/localtime:ro -d rancher/server

#安装agent

docker run --rm --privileged -v /var/run/docker.sock:/var/run/docker.sock -v

/var/lib/rancher:/var/lib/rancher rancher/agent:v1.2.11

http://39.101.191.131:8000/v1/scripts/D3DBD43F263109BB881F:1577750400000:7M0y

BzCw4XSxJklD7TpysYIpI


6.2、Portainer

Portainer是Docker的图形化管理工具,提供状态显示面板、应用模板快速部署、容器镜像网络数据卷 的基本操作(包括上传下载镜像,创建容器等操作)、事件日志显示、容器控制台操作、Swarm集群和 服务等集中管理和操作、登录用户管理和控制等功能。功能十分全面,基本能满足中小型单位对容器管 理的全部需求。

如果仅有一个docker宿主机,则可使用单机版运行,Portainer单机版运行十分简单,只需要一条语句即 可启动容器,来管理该机器上的docker镜像、容器等数据。

docker run -d -p 8088:9000 \

--restart=always -v /var/run/docker.sock:/var/run/docker.sock --

privileged=true portainer/portainer

访问方式:http://IP:8088

首次登陆需要注册用户,给admin用户设置密码

单机版这里选择local即可,选择完毕,点击Connect即可连接到本地docker:


相关文章
|
5天前
|
NoSQL 关系型数据库 MySQL
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
91 56
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
|
12天前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
142 77
|
2天前
|
NoSQL 关系型数据库 应用服务中间件
docker基础篇:安装tomcat
docker基础篇:安装tomcat
92 64
|
4天前
|
关系型数据库 MySQL 数据库
docker高级篇(大厂进阶):安装mysql主从复制
docker高级篇(大厂进阶):安装mysql主从复制
49 24
|
4天前
|
NoSQL 算法 Redis
docker高级篇(大厂进阶):安装redis集群
docker高级篇(大厂进阶):安装redis集群
53 24
|
10天前
|
关系型数据库 MySQL Docker
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
62 24
|
3天前
|
Ubuntu Linux Docker
Ubuntu22.04上Docker的安装
通过以上详细的安装步骤和命令,您可以在Ubuntu 22.04系统上顺利安装
41 11
|
12天前
|
关系型数据库 MySQL Docker
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
77 6
|
21天前
|
监控 Docker 容器
在Docker容器中运行打包好的应用程序
在Docker容器中运行打包好的应用程序
|
14天前
|
数据建模 应用服务中间件 nginx
docker替换宿主与容器的映射端口和文件路径
通过正确配置 Docker 的端口和文件路径映射,可以有效地管理容器化应用程序,确保其高效运行和数据持久性。在生产环境中,动态替换映射配置有助于灵活应对各种需求变化。以上方法和步骤提供了一种可靠且易于操作的方案,帮助您轻松管理 Docker 容器的端口和路径映射。
55 3
下一篇
DataWorks