手机版 欢迎访问it开发者社区(www.mfbz.cn)网站

当前位置: > 开发

Docker学习01

时间:2021/4/1 9:27:51|来源:|点击: 次

文章目录

    • Docker是什么?
    • Docker的用途
    • Docker安装
      • Docker的基本组成
      • 安装Docker
      • 阿里云镜像加速
      • 回顾hello-world流程
    • Docker的常用命令
      • 帮助命令
      • 镜像命令
      • 容器命令
      • 常用其他命令
      • 小结

Docker是什么?

Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。

Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。

总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。

借助 Docker,可以将容器当做轻巧、模块化的虚拟机使用。同时还将获得高度的灵活性,从而实现对容器的高效创建、部署及复制,并能将其从一个环境顺利迁移至另一个环境,从而有助于针对云来优化应用。

Docker的用途

Docker 的主要用途,目前有三大类。

(1)提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。

(2)提供弹性的云服务。因为 Docker 容器可以随开随关,很适合动态扩容和缩容。

(3)组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构。

Docker安装

Docker的基本组成

镜像(image):

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

容器(repository):

docker利用容器技术,独立运行一个或者一组应用,是通过镜像来创建的。

启动、停止、删除,基本命令。

目前可以把容器理解为一个简易的linux系统。

仓库(container):

仓库就是存放镜像的地方;

仓库分为公有仓库和私有仓库;

Docker Hub

阿里云…都有容器服务(配置镜像加速)。

安装Docker

#1、卸载旧的版本
yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
                
#2、需要的安装包
 yum install -y yum-utils
#3、设置镜像仓库
yum-config-manager \
    --add-repo \
https://download.docker.com/linux/centos/docker-ce.repo  #默认是国外

yum-config-manager \
    --add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo  #建议使用阿里云镜像
#4、安装docker相关  docker-ce是社区版  ee是企业版
yum install docker-ce docker-ce-cli containerd.io
#5、启动docker
systemctl start docker
#6、使用 docker version查看是否安装成功。
#7、hello-world
docker run hello-world

#8、查看下载的hello-world镜像
# docker images
REPOSITORY    TAG       IMAGE ID       CREATED       SIZE
hello-world   latest    d1165f221234   3 weeks ago   13.3kB

了解:如何卸载docker

#1、卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
#2、删除资源
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

阿里云镜像加速


1、找到镜像加速地址

加速器地址:https://ri5j7lux.mirror.aliyuncs.com

2、配置使用

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://ri5j7lux.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

回顾hello-world流程

Docker为什么比VM快?

1、Docker有着比虚拟机更少的抽象层;

2、Docker利用的是宿主机的内核,VM需要的是Guest OS。

所以说,新建容器的时候,docker不需要像虚拟机一样重新加载一个操作系统内核,避免引导。

Docker的常用命令


帮助命令


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

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

镜像命令


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

[root@ecss6 /]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED       SIZE
hello-world   latest    d1165f221234   3 weeks ago   13.3kB
#解释
REPOSITORY 镜像的仓库源
TAG        镜像的标签
IMAGE ID   镜像的id
CREATED    镜像的创建时间
SIZE       镜像的大小

#可选项
-a --all 列出所有镜像
-q --quiet 只显示镜像的id

docker search 搜索镜像

[root@ecss6 /]# docker search mysql
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   10670     [OK]       
mariadb                           MariaDB Server is a high performing open sou…   4005      [OK]       
mysql/mysql-server                Optimized MySQL Server Docker images. Create…   779                  [OK]

#可选项,通过搜索来过滤
--filter=STARS=3000  搜索出来的镜像就是STARS大于3000的

docker pull 下载镜像

#下载镜像 docker pull 镜像名:[tag]
[root@ecss6 /]# docker pull mysql
Using default tag: latest  #如果不写tag,默认就是latest
latest: Pulling from library/mysql
a076a628af6f: Pull complete   #分层下载,docker image的核心  联合文件系统
f6c208f3f991: Pull complete 
88a9455a9165: Pull complete 
406c9b8427c6: Pull complete 
7c88599c0b25: Pull complete 
25b5c6debdaf: Pull complete 
43a5816f1617: Pull complete 
1a8c919e89bf: Pull complete 
9f3cf4bd1a07: Pull complete 
80539cea118d: Pull complete 
201b3cad54ce: Pull complete 
944ba37e1c06: Pull complete 
Digest: sha256:feada149cb8ff54eade1336da7c1d080c4a1c7ed82b5e320efb5beebed85ae8c
#签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest  #真实地址

docker pull mysql等价于
docker pull docker.io/library/mysql:latest
指定版本下载
docker pull mysql:5.7

docker rmi 删除镜像!

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

容器命令


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

docker pull centos

新建容器并启动

docker run [可选参数] image
#参数说明
--name="Name"   容器名字,用来区分容器
-d              后台方式运行
-it             使用交互方式运行,进入容器查看内容
-p              指定容器的端口
	-p ip:主机端口:容器端口
	-p 主机端口:容器端口(常用)
	-p 容器端口
	容器端口
-P              随机指定端口

#测试,启动并进入容器
[root@ecss6 /]# docker run -it centos /bin/bash
[root@4465ab77df5a /]# ls  查看容器内的centos
bin  home   lost+found	opt   run   sys  var
dev  lib    media	proc  sbin  tmp
etc  lib64  mnt		root  srv   usr
#从容器中退出
[root@4465ab77df5a /]# exit
exit

列出所有运行的容器

#docker ps 命令
      列出当前正在运行的容器
-a    列出当前正在运行的容器以及历史运行过的容器
-n=?  显示最近创建的容器 
-q    只显示容器的编号
[root@ecss6 /]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@ecss6 /]# docker ps -a
CONTAINER ID   IMAGE          COMMAND       CREATED          STATUS                     PORTS     NAMES
4465ab77df5a   centos         "/bin/bash"   41 minutes ago   Exited (0) 4 minutes ago             festive_germain
8b9232658030   d1165f221234   "/hello"      8 hours ago      Exited (0) 8 hours ago               silly_yonath
[root@ecss6 /]# docker ps -a -n=1
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS                     PORTS     NAMES
4465ab77df5a   centos    "/bin/bash"   43 minutes ago   Exited (0) 5 minutes ago  festive_germain

退出容器

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        #强制停止当前容器

常用其他命令


后台启动容器

#[root@ecss6 /]# docker run -d centos
984f09469c8ff31846c37c371259899c29da6a31240d6b7139436f7a0e711651
[root@ecss6 /]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
#发现centos停止了
#docker容器后台运行必须要有一个前台进程,docker发现没有应用就会自动停止。

查看日志

docker logs -f -t --tail 容器id
-f      Follow log output
-t      Show timestamps
--tail  Number of lines to show from the end of the logs   Default all.

查看容器中进程信息

# docker top 容器id

查看容器元数据

# docker inspect 容器id

进入当前正在运行的容器

# 第一种方式
# docker exec -it 容器id bashShell(/bin/bash)
进入容器后开启一个新的终端,可以在里面操作(常用)
# 第二种方式
# docker attach 容器id
进入容器正在执行的终端,不会启动新的进程。

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

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

小结


Copyright © 2002-2019 某某自媒体运营 版权所有