欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Docker的详细使用

程序员文章站 2022-06-16 13:13:33
Docker的详细使用一、Docker概述1.Docker为什么会出现?二、Docker安装1.Docker的基本组成2. 安装Docker一、Docker概述1.Docker为什么会出现?一款产品:开发-上线两套环境!应用环境,应用配置。开发-运维。问题:我在我的电脑上可以运行!版本更新,导致服务不可用!对于运维来说,考验就十分大?环境配置是十分的麻烦,每一个机器都要部署环境(集群 Redis、ES、Hadoop)!费时费力。发布个项目(jr+( Redis MySQL jdk ES)),项目能...

一、Docker概述

1. Docker为什么会出现?

  • 一款产品:开发-上线两套环境!应用环境,应用配置。
  • 开发-运维。问题:我在我的电脑上可以运行!版本更新,导致服务不可用!对于运维来说,考验就十分大?环境配置是十分的麻烦,每一个机器都要部署环境(集群 RedisESHadoop)!费时费力。发布个项目(jr+( Redis MySQL jdk ES)),项目能不能都带上环境安装打包!之前在服努器配置—个应用的环境 Redis MySQL jdk ES Hadoop,配置超麻烦了,不能够跨平台。Windows,最后发布到 Linux
  • 传统:开发jar,运维来做。
  • 现在:开发打包部署上线,一套流程做完。
  • java-apk-发布(应用商店)-张三使用apk–安装即可用。
    -java-jar(环境)-…打包项目带上环境(镜像)-(Dσcker仓库:商店)-…下载我们发布的镜像…-直接运行即。
  • Docker的思想就来自于集装箱!
  • JRE-多个应用(端口冲突)–原来都是交叉的!
  • 隔离: Docker核心思想!打包装箱!每个箱子是互相隔离的。
  • Docker通过隔离机制,可以将服务器利用到极致!

二、Docker安装

1. Docker的基本组成

Docker的详细使用

  • 镜像( Image
    docker镜像就好比是—个模板,可以通过这个模板来创建容器服务, tomcat镜像==>run==> tomcat01容器(提供服务器)通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的。
  • 容器(container):
    Docker利用容器技术,独立运行个或者个组应用,通过镜像来创建的。
    启动,停止,删除,基本命令
    目前就可以把这个容器理解为就是一个简易的linux系统
  • 仓库( repository
    仓库就是存放镜像的地方
    仓库分为公有仓库和私有仓库
    Docker hub(默认是国外的)
    阿里云…都有容器服务器(配置镜像加速!)

2. 安装Docker

环境准备

1、需要会一点点的 Linux的基础
2、 Centos7
3、我们使用 Shel连接远程服务器进行操作!

环境查看

## 查看系统内核是 3.10 以上的
[root@iz2ze0j4s19xhxuqg75l0zz ~]# uname -r
3.10.0-1127.el7.x86_64
[root@iz2ze0j4s19xhxuqg75l0zz ~]#  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"

安装

帮助文档

## 1.卸载旧的版本
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine       
## 2.需要的安装包
sudo yum install -y yum-utils
## 3.设置镜像仓库
sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo # 默认是国外的
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
## 更新软件包索引
yum makecache fast
## 4.安装docker相关的 docker-ce社区版 ee企业版
sudo yum install docker-ce docker-ce-cli containerd.io
## 5.启动docker
systemctl start docker
## 6.使用docker version查看docker是否安装成功


Docker的详细使用

## 7. hello-world
docker run hello-world

Docker的详细使用

##8.查看镜像
docker images
##1.卸载docker
sudo yum remove docker-ce docker-ce-cli containerd.io
##2.删除资源
sudo rm -rf /var/lib/docker

3. 配置阿里云镜像加速器

针对Docker客户端版本大于 1.10.0 的用户

您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://m5c73hcp.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

4. docker run hello-world 命令的执行流程

Docker的详细使用

5. 底层原理

Docker是什么工作的?
Docker是一个 Client- Server结构的系统, Docker的守护进程运行在主机上。通过 Socket从客户端访问。
Dockerserver接收到 Docker- Client的指令,就会执行这个命令!
Docker的详细使用
Docker为什么比VM快?
1、 Docker有着比虚拟机更少的抽象层。
2、 Docker利用的是宿主机的内核,vm需要是Guest os

Docker的详细使用
所以说,新建一个容器的时候, docker不需要想虚拟机一样重新加载一个操作系统內核,避免引导。虚拟机是加载 Guest os,分钟级别的,而 docker是利用宿主机的操作系统吗,省略了这个复杂的过程,秒级!
Docker的详细使用

三、Docker的常用命令

1. 帮助命令

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

2. 镜像命令

  • docker images 查看所有本地的主机上的镜像

    [root@iz2ze0j4s19xhxuqg75l0zz ~]# docker images
    REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
    mysql                     latest              e1d7dc9731da        2 months ago        544MB
    # 解释
    REPOSITORY 镜像仓库源仓库
    TAG        镜像的标签   
    IMAGE ID   镜像id
    CREATED	   镜像创建时间
    SIZE 镜像大小
    # 可选项
    -a, --all             显示所有镜像(默认隐藏中间镜像)
    -q, --quiet           只显示镜像的id            
    
  • docker search 搜索镜像

    [root@iz2ze0j4s19xhxuqg75l0zz ~]# docker search mysql
    NAME                              DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
    mysql                             MySQL is a widely used, open-source relation…   10156               [OK]                
    mariadb                           MariaDB is a community-developed fork of MyS…   3738                [OK]
    # 可选项,通过搜索来过滤
    --filter=STARS=3000
    
  • docker pull下载镜像

    [root@iz2ze0j4s19xhxuqg75l0zz ~]# docker pull mysql
    Using default tag: latest  # 如果不写tag ,默认就是latest
    latest: Pulling from library/mysql
    bb79b6b2107f: Pull complete 	# 分层下载,docker image的核心 联合文件系统
    49e22f6fb9f7: Pull complete 
    842b1255668c: Pull complete 
    9f48d1f43000: Pull complete 
    c693f0615bce: Pull complete 
    8a621b9dbed2: Pull complete 
    0807d32aef13: Pull complete 
    a56aca0feb17: Pull complete 
    de9d45fd0f07: Pull complete 
    1d68a49161cc: Pull complete 
    d16d318b774e: Pull complete 
    49e112c55976: Pull complete 
    Digest: sha256:8c17271df53ee3b843d6e16d46cff13f22c9c04d6982eb15a9a47bd5c9ac7e2d #签名
    Status: Downloaded newer image for mysql:latest
    docker.io/library/mysql:latest #真实地址
    # 等价于它
    docker pull mysql
    docker pull docker.io/library/mysql:latest
    # 指定版本下载
    [root@iz2ze0j4s19xhxuqg75l0zz ~]# docker pull mysql:5.7
    5.7: Pulling from library/mysql
    bb79b6b2107f: Already exists 
    49e22f6fb9f7: Already exists 
    842b1255668c: Already exists 
    9f48d1f43000: Already exists 
    c693f0615bce: Already exists 
    8a621b9dbed2: Already exists 
    0807d32aef13: Already exists 
    f15d42f48bd9: Pull complete 
    098ceecc0c8d: Pull complete 
    b6fead9737bc: Pull complete 
    351d223d3d76: Pull complete 
    Digest: sha256:4d2b34e99c14edb99cdd95ddad4d9aa7ea3f2c4405ff0c3509a29dc40bcb10ef
    Status: Downloaded newer image for mysql:5.7
    docker.io/library/mysql:5.7
    
    
  • docker rmi 删除镜像

    [root@iz2ze0j4s19xhxuqg75l0zz ~]# docker rmi -f 镜像id #删除指定镜像
    [root@iz2ze0j4s19xhxuqg75l0zz ~]# docker rmi -f 镜像id 镜像id 镜像id #删除多个镜像
    [root@iz2ze0j4s19xhxuqg75l0zz ~]# docker rmi -f $(docker images -aq) #删除全部镜像
    

3. 容器命令

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

docker pull centos
  • 新建容器并启动
docker run [可选参数] image
# 参数 说明
--name="Name" 容器名字 tomcat01 tomcat02,用来区分容器
-d 			  后台方式运行
-it			  使用交互方式运行,进入容器查看内容
-p			  指定容器的端口 -p 8080:8080
-P			  随机指定端口

#测试,启动并进入容器
[root@iz2ze0j4s19xhxuqg75l0zz ~]# docker run -it centos /bin/bash
[root@c9c4bb01f7dc /]#
[root@c9c4bb01f7dc /]# ls	#查看容器内的centos,基础版本,很多命令都不完善
bin  etc   lib	  lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr

#从容器退出主机
exit
  • 列出所有的运行容器
docker ps
		#列出当前正在运行的容器
-a   	#列出当前正在运行的容器+带出历史运行过的容器
-n=?	#显示最近创建的容器
-q 		#只显示容器的编号
  • 退出容器
exit 		#直接容器停止并退出
Ctrl + P +Q #容器不停止退出
  • 删除容器
docker rm 容器id					#删除指定的容器,不能删除正在运行的容器,如果要强制删除,rm -f
docker rm -f $(docker ps -aq)	#删除所有容器
docker ps -a -q|xargs docker rm #删除所有容器(没有运行的)
  • 启动和停止容器的操作
docker start 容器id			#启动容器
docker restart 容器id		#重启容器
docker stop 容器id			#停止当前正在运行的容器
docker kill 容器id			#强制停止当前容器

4. 其他常用命令

  • 后台启动命令

    docker run -d 镜像名
    [root@iz2ze0j4s19xhxuqg75l0zz /]# docker run -d centos
    
    #问题 docker ps,发现 centos停止了
    #常见的坑: docker容器使用后台运行,就必须要有要一个前台进程, docker发现没有应用,就会自动停止
    #ngInx,容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了
    
  • 查看日志、

    docker logs -f -t --tail 容器,没有日志
    #自己编写一段shell脚本(测试未成功)
    [root@iz2ze0j4s19xhxuqg75l0zz /]# docker run -d centos /bin/bash -c “while true;do echo canying;sleep 1;done”
    #显示日志
    -tf 			#显示日志
    --tail number	#要显示日志的条数
    [root@iz2ze0j4s19xhxuqg75l0zz /]# docker logs -tf --tail 10 dce7b86171bf
    
  • 查看容器中进程信息

    docker top 容器id
    [root@iz2ze0j4s19xhxuqg75l0zz /]# docker top d43224512238
    UID     PID     PPID     C       STIME      TTY      TIME            CMD
    root    19810   19794    0       16:26      ?        00:00:00         /bin/bash
    
    
  • 查看镜像的元数据

    docker inspect	容器id
    [root@iz2ze0j4s19xhxuqg75l0zz /]# docker inspect d43224512238
    [
        {
            "Id": "d43224512238bf10a19bb33de20f00c8fcf23b4cae442f9461cd716bcdd69e7a",
            "Created": "2020-11-12T08:26:47.279424514Z",
            "Path": "/bin/bash",
            "Args": [],
    
    
  • 进入当前正在运行的容器

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

# 命令
docker exec -it 容器id bashShell
# 测试
[root@iz2ze0j4s19xhxuqg75l0zz /]# docker exec -it d43224512238 /bin/bash
[root@d43224512238 /]# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 08:26 pts/0    00:00:00 /bin/bash
root        14     0  0 08:43 pts/1    00:00:00 /bin/bash
root        27    14  0 08:43 pts/1    00:00:00 ps -ef


# 方式二
docker attach 容器id
# 测试 
[root@iz2ze0j4s19xhxuqg75l0zz /]# docker attach d43224512238
[root@d43224512238 /]# 
正在执行当前代码...

#docker exec  			#进入容器后开启一个新的终端,可以在里面操作(常用)
#docker attach 			#进入容器正在执行的终端,不会启动新的进程
  • 从容器内拷贝文件到主机上
docker cp 容器id:容器内路径 目的主机路径

四、Docker安装软件

1. 安装nginx

  • 搜索镜像

    docker search nginx
    
  • 下载镜像

    docker pull nginx
    
  • 运行测试

[root@iz2ze0j4s19xhxuqg75l0zz /]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              c39a868aad02        6 days ago          133MB
centos              latest              0d120b6ccaa8        3 months ago        215MB
# -d 后台运行
# --name 宿主机端口,容器内端口
[root@iz2ze0j4s19xhxuqg75l0zz /]# docker run -d --name nginx01 -p 3344:80 nginx
f73ed2fc8142bcf30467c996c9c862875c871adcaf046c959e21ddb3617fa3be
[root@iz2ze0j4s19xhxuqg75l0zz /]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
f73ed2fc8142        nginx               "/docker-entrypoint.…"   6 seconds ago       Up 4 seconds        0.0.0.0:3344->80/tcp   nginx01
[root@iz2ze0j4s19xhxuqg75l0zz /]# curl localhost:3344

#进入容器
[root@iz2ze0j4s19xhxuqg75l0zz ~]# docker exec -it nginx01 /bin/bash
root@f73ed2fc8142:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
root@f73ed2fc8142:/# cd /etc/nginx
root@f73ed2fc8142:/etc/nginx# ls
conf.d		koi-utf  mime.types  nginx.conf   uwsgi_params
fastcgi_params	koi-win  modules     scgi_params  win-utf
root@f73ed2fc8142:/etc/nginx#

2. 安装tomcat

官方的使用
docker run -it --rm tomcat:9.0
我们之前的启动都是后台,停止了容器之后,容器还是可以查到 docker run -it --rm,一般用来测试,用完就删除

  • 搜索镜像
docker pull tomcat
  • 启动运行
docker run -d -p 3355:8080 --name tomcat01 tomcat
#进入容器
[root@iz2ze0j4s19xhxuqg75l0zz ~]# docker exec -it tomcat01 /bin/bash

#发现问题:1、linux命令少了,2、没有 webapps。阿里云镜像的原因。默认是最小的镜像,所有不必要的都剔除掉
#保证最小可运行的环境
cp -r webapps.dist/* webapps

本文地址:https://blog.csdn.net/qq_35996924/article/details/109572076