Docker入门——初识Docker

2021/12/25 23:08:05

本文主要是介绍Docker入门——初识Docker,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Doaker学习笔记

  • Docker的认知
  • 安装Docker
  • 卸载Docker
  • 阿里云镜像加速
  • Docker的常用命令
    • 帮助命令
    • 镜像命令
  • 容器命令
  • 其他容器命令
  • 练习
    • 安装Nginx
    • 安装tomcat
    • 部署es
    • 配置可视化(pointainer)

Docker的认知

  • 核心概念
    docker是一种linux容器技术。容器有效的将由单个操作系统挂管理的资源划分到孤立的组中,以便更好的在组之间平衡有冲突的资源使用需求。可简单理解为一种沙盒 。每个容器内运行一个应用,不同的容器之间相互隔离,容器之间也可以建立通信机制。容器的创建和停止都十分快速,资源需求远远低于虚拟机。
    Docker通过隔离机制,可以将服务器利用到极致。

  • 基于GO语言开发的。

  • 官网地址:https://www.docker.com/
    文档地址:https://docs.docker.com/
    仓库地址:https://hub.docker.com/

  • 区别

  • 传统的虚拟机,虚拟出一个硬件,运行一个完整的操作系统

  • 容器内的应用直接运行在宿主机上,容器没有自己的内核,也没有虚拟硬件
    每个容器是相互隔离的,每个容器都有属于自己的文件系统,互补影响
    在这里插入图片描述
    5.docker与虚拟化

  • 虚拟化是一种资源管理技术,是将计算机的各种实体资源,如服务器,网络,内存等抽象、转化后呈现出来,使用户以更好的方式来应用这些资源。虚拟化目标往往是为了在同一个主机上运行多个系统或者应用,从而提高资源的利用率,降低成本,方便管理及容错容灾。

  • 操作系统级的虚拟化:内核通过创建多个虚拟的操作系统实例(内核和库)来隔离不同的进程。docker以及其他容器技术就属于此范畴。

  • 传统虚拟化方式是在硬件层面实现虚拟化,需要有额外的虚拟机管理应用和虚拟机操作系统层。而docker容器是在操作系统层面上实现虚拟化,直接复用本地主机操作系统,更加轻量。
    在这里插入图片描述

  1. 作用
    1、应用可以更加快捷的交付和部署
    2、使用的分层存储以及镜像的技术,更便捷的升级和扩容,轻松的迁移扩展
    3、更简单的系统运维, 简单的更新管理
    4、更高效的计算资源利用
    5、能高效地构建应用。
    6、更快速的启动时间,由于直接运行于宿主内核,无需启动完整的操作系统
    一个虚拟机上可以运行多个容器实例
  2. 结构
    镜像(image):可以看作一个模板,可以通过这个模板来创建容器服务
    容器(container):独立运行一个或一个组应用,通过镜像创建,相当于一个实例
    仓库(repository):存放镜像的地方
    在这里插入图片描述
    在这里插入图片描述

安装Docker

  1. 卸载旧的版本
 $sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
  1. 安装
 sudo yum install -y yum-utils
  1. 设置镜像地址
 sudo yum-config-manager \
   --add-repo \
   http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo  --- 推荐使用阿里云镜像
#https://download.docker.com/linux/centos/docker-ce.repo        --国外镜像
  1. 更新软件索引
sudo yum makecache fast
  1. 安装docker相关内容
    docker -ce 社区版
    docker -ee 企业版
sudo yum install docker-ce docker-ce-cli containerd.io
  1. 启动Docker
sudo systemctl start docker
  1. 获取docker的版本
docker versiondock
  1. 测试
docker run hello-world
  1. 查看下载的 hello-world镜像
[root@localhost ~]# docker images
REPOSITORY                          TAG           IMAGE ID       CREATED         SIZE
hello-world                         latest        feb5d9fea6a5   2 months ago    13.3kB
nacos/nacos-server                  2.0.1         90c4c6c5d925   7 months ago    1.04GB

卸载Docker

  1. 卸载依赖
yum remove docker -ce docker -ce-cli containerd,io
  1. 删除资源
rm -rf  /var/lib/docker                    ---默认工作路径

阿里云镜像加速

  1. 阿里云 --容器服务
  2. 镜像加速器
  3. 配置使用
sudo mkdir -p ./etc/docker
sudo tee ./etc/docker/daemon.jsin<<-'EOF'
{
"registry-mirrors":["地址"]
}
sudo systemctl daemon-reload    
sudo systemctl restart docker

Docker的常用命令

帮助命令

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

帮助文档地址:https://docs.docker.com/reference/

镜像命令

docker images    查看所有本地主机上的镜像
#解释
REPOSITORY   镜像的仓库源
TAG					  镜像的标签
IMAGE ID        镜像的ID
CREATE			 镜像的创建时间
SIZE				镜像的大小
#可选项
 -a, --all             列出所有的镜像
     --digests         Show digests
 -f, --filter filter   Filter output based on conditions provided
     --format string   Pretty-print images using a Go template
     --no-trunc        Don't truncate output
 -q, --quiet           只显示镜像的ID

docker search   搜索镜像
例子:docker serach mysql
添加参数:--filter=STARS=3000     # 搜索出来的镜像STARS大于3000
docker pull mysql    #默认下载最新版
等价于:docker pull docker.io/library/mysql:latest
添加参数: :tag   #添加版本信息
联合文件系统
docker rmi -f  镜像ID         #删除镜像
docker rmi -f $(docker images -aq)    #递归删除所有镜像

容器命令

 #启动容器
 docker run[可选参数] image
 #参数说明
 --name= "容器名称"       容器名称,用于区分容器
 -d                   后台方式运行
 -it					使用交互方式运行,进入容器查看内容
 -p					指定容器的端口   
 -P                 随机指定端口
 例子
 ##启动并进入容器
 docker  run -it 容器名称  /bin/bash
 ##退出并停止容器
 exit
 ##容器不停止退出
 Ctrl + P + Q
#查看运行的容器
docker ps
#查看曾经运行过的容器
docker ps -a
#显示最近创建的容器
-n = ?  
#只显示容器的编号
-q
#删除容器(不能删除正在运行的容器,需加 rf -f)
docker rm 容器的ID
#删除所有容器
docker rm -f ¥(docker ps -aq)
docker ps -a -q|xargs docker rm
#启动容器
docker start    容器ID
#重启容器
docker restart 容器ID
#停止当前正在运行的容器
docker stop 容器ID
#Q强制停止当前容器
docker kill 容器的ID

其他容器命令

docker run -d 镜像名称
问题: docker ps 发现镜像停止了
原因: docker 容器使用后台运行时,就必须有一个前台的进程,docker发现没有应用,就会自动停止
 如 nginx容器启动后,法相自己没有提供服务,就会立即停止
#查看日志
docker logs -f -t  --tail  t条数   容器ID
#查看容器进程信息
docker top 容器ID
#查看容器内部的信息
docker inspect 容器的ID
#查看容器内部的信息
docker inspect 容器的ID
#查看状态
docker stats

进入当前正在运行的容器

#我们通常容器都是使用后台方式运行的,需要进入容器
#命令
方式一:进入容器后开启一个新的终端,可以在里面操作
docker exec -it 容器的ID bashShell
例子:
[root@localhost ~]# docker exec -it 90185ae982b0 /bin/bash
root@90185ae982b0:/apache-zookeeper-3.6.0-bin# 
方式二:进入容器正在执行的终端,不会启动新的进程
docker attach 容器的ID
#从容器内拷贝文件到主机上
docker cp 容器的ID:容器内的路径   目标主机的路径

练习

安装Nginx

docker search nginx   #搜索
docker pull nginx        #拉取
docker run -d --name nginx01 -p :3344:80 nginx    #启动
-d 后台运行 
-p 宿主机端口:容器内部端口                  暴漏端口于宿主机
curl localhost:3344     #测试

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

安装tomcat

docker run -it --rm tomcat:9.0
该命令表示用完即删,一般用于测试
docker pull tomcat
docker run -d -p 3355:8080 --name tomcat01 tomcat
docker exec -it tomcat01 /bin/bash

发现 1:linux命令少了 2:没有webapps
原因:阿里云镜像的原因,默认是最小的镜像,所有不必要的都被剔除
解决方法:

docker exec -it tomcat01 /bin/bash
cp -r webapps.dist/* webapps

部署es

[root@localhost ~]# docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.16.2
[root@localhost ~]# curl localhost:9200
{
 "name" : "12c7a95dad74",
 "cluster_name" : "docker-cluster",
 "cluster_uuid" : "OqhjqILdQ3SetCie7pnOSg",
 "version" : {
   "number" : "7.6.2",
   "build_flavor" : "default",
   "build_type" : "docker",
   "build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",
   "build_date" : "2020-03-26T06:34:37.794943Z",
   "build_snapshot" : false,
   "lucene_version" : "8.4.0",
   "minimum_wire_compatibility_version" : "6.8.0",
   "minimum_index_compatibility_version" : "6.0.0-beta1"
 },
 "tagline" : "You Know, for Search"
}
-e 添加环境配置
[root@localhost ~]# docker run -d --name elasticsearch02 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e  ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.16.2

配置可视化(pointainer)

docker run -d -p 8088:9000\
 --restart=always -v /var/run/docker.sock:var/run/docker.sock --name portainer1 --privileged=true portainer/portainer


这篇关于Docker入门——初识Docker的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程