docker介绍及其基础命令用法

docker介绍及其基础命令用法,第1张

docker介绍及其基础命令用法

文章目录
  • 1. 什么是docker
    • 1.1 OCI&OCF
    • 1.2 Docker引擎架构
    • 1.3 Docker运行架构
    • 1.4 docker架构
  • 2. docker镜像与镜像仓库
  • 3. docker对象
  • 4. docker的安装及使用
    • 4.1 docker安装
    • 4.2 docker加速
    • 4.3 docker常用 *** 作
      • 4.3.1 镜像 *** 作
      • 4.3.2 容器 *** 作

1. 什么是docker

Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

Docker的核心思想就是来自集装箱;集装箱的概念是隔离货物,所以docker的核心就是隔离机制。同时docker使用可移植镜像所以部署以及运维极其方便快捷。

docker中的容器:

  • lxc --> libcontainer --> runC
1.1 OCI&OCF

OCI

开放容器倡议:

  • 由Linux基金会主导于2015年6月创立
  • 旨在围绕容器格式和运行时制定一个开放的工业化标准

包含两个规格

  • 运行时规范(runtime-spec)
  • 镜像规范(image-spec)

OCF

开放式容器格式:

runC 是一个 CLI 工具,用于根据 OCI 规范生成和运行容器

  • 容器作为 runC 的子进程启动,可以嵌入到各种其他系统中,而无需运行守护进程
  • runC 建立在 libcontainer 之上,同样的容器技术为数百万个 Docker 引擎安装提供支持

docker提供了一个专门容纳容器镜像的站点:点此

1.2 Docker引擎架构

1.3 Docker运行架构

1.4 docker架构

2. docker镜像与镜像仓库


在docker中仓库的名字是以应用的名称取名的,镜像是静态的,而容器是动态的,容器有其生命周期,镜像与容器的关系类似于程序与进程的关系。镜像类似于文件系统中的程序文件,而容器则类似于将一个程序运行起来的状态,也即进程。所以容器是可以删除的,容器被删除后其镜像是不会被删除的。

3. docker对象

当你使用 docker 时,相当于正在创建和使用图像、容器、网络、卷、插件和其他对象。

  • IMAGES (镜像)
  1. 图像是一个只读模板,其中包含创建 docker 容器的说明。

  2. 一般情况下,一个镜像基于另一个镜像,并带有一些额外的自定义。

  3. 镜像的获取:

    • 从远程仓库下载
    • 朋友拷贝给你
    • 自己制作docker镜像(DockerFile)
  • ConTAINERS (容器)
  1. 容器是镜像的可运行实例。
  2. 您可以使用 docker API 或 CLI 创建、运行、停止、移动或删除容器。
  3. 您可以将容器连接到一个或多个网络,为其附加存储,甚至可以根据其当前状态创建新镜像。
4. docker的安装及使用 4.1 docker安装
//配置yum仓库
[root@localhost ~]# wget -O /etc/yum.repos.d/CentOS-base.repo https://mirrors.aliyun.com/repo/Centos-8.repo

//配置docker的yum源
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# curl -o docker-ce.repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1919  100  1919    0     0  12380      0 --:--:-- --:--:-- --:--:-- 12380
[root@localhost yum.repos.d]# ls
CentOS-base.repo             CentOS-Linux-ContinuousRelease.repo  CentOS-Linux-Extras.repo            CentOS-Linux-Media.repo       CentOS-Linux-Sources.repo
CentOS-Linux-AppStream.repo  CentOS-Linux-Debuginfo.repo          CentOS-Linux-FastTrack.repo         CentOS-Linux-Plus.repo        docker-ce.repo
CentOS-Linux-baseOS.repo     CentOS-Linux-Devel.repo              CentOS-Linux-HighAvailability.repo  CentOS-Linux-PowerTools.repo
[root@localhost yum.repos.d]# sed -i 's@https://download.docker.com@https://mirrors.tuna.tsinghua.edu.cn/docker-ce@g' docker-ce.repo

//下载docker所需要的环境
[root@localhost yum.repos.d]# yum install -y yum-utils device-mapper-persistent-data lvm2

//安装docker
[root@localhost yum.repos.d]# yum -y install docker-ce

4.2 docker加速

一般来说docker下载镜像相当缓慢,需要配置加速来使用
docker-ce的配置文件是/etc/docker/daemon.json,此文件默认不存在,需要我们手动创建并进行配置,而docker的加速就是通过配置此文件来实现的。

docker的加速有多种方式:

  • docker cn
  • 中国科技大学加速
  • 阿里云加速(需要通过阿里云开发者平台注册帐号,免费使用个人私有的加速)

设置阿里云镜像加速

[root@localhost ~]# systemctl start docker
[root@localhost ~]# cat > /etc/docker/daemon.json < {
>   "registry-mirrors": ["写自己的阿里云加速地址"]
> }
> EOF
[root@localhost ~]# systemctl restart docker
[root@localhost ~]# systemctl daemon-reload

4.3 docker常用 *** 作 命令功能docker search从Docker Hub镜像仓库上查找镜像docker pull从Docker Hub镜像仓库上拉取镜像docker images列出本地的镜像docker create创建一个新的容器(与run命令不同,使用create命令只能创建容器而并不启动)docker start启动容器docker run根据镜像新建并启动容器docker attach进入到一个正在运行容器内(使用exit命令退出后,容器会停止)docker ps列出当前所有正在运行的容器docker logs获取容器的日志docker restart重新启动容器docker stop停止正在运行的容器docker kill杀死正在运行的容器docker rm删除容器docker exec进入到一个正在运行容器内(使用exit命令退出后,容器会继续运行)docker info显示当前系统信息、docker容器、镜像个数、设置等信息docker inspect用于以JSON格式显示容器与镜像的详细信息
//查看docker的版本信息
[root@localhost ~]# docker version
Client: Docker Engine - Community
 Version:           20.10.11
 API version:       1.41
 Go version:        go1.16.9
 Git commit:        dea9396
 Built:             Thu Nov 18 00:36:58 2021
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.11
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.16.9
  Git commit:       847da18
  Built:            Thu Nov 18 00:35:20 2021
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.4.12
  GitCommit:        7b11cfaabd73bb80907dd23182b9347b4245eb5d
 runc:
  Version:          1.0.2
  GitCommit:        v1.0.2-0-g52b36a2
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

//查看docker的详细信息
[root@localhost ~]#  docker info 
Client:             #docker客户端信息
 Context:    default
 Debug Mode: false
 Plugins:           #插件
  app: Docker App (Docker Inc., v0.9.1-beta3)
  buildx: Build with BuildKit (Docker Inc., v0.6.3-docker)
  scan: Docker Scan (Docker Inc., v0.9.0)

Server:                          #docker服务器端信息
 Containers: 0                   #容器数量
  Running: 0                     #正在运行的数量
  Paused: 0                      #暂停的数量
  Stopped: 0                     #已停止的数量
 Images: 0                       #镜像数量                
 Server Version: 20.10.11           #docker服务器版本	 
 Storage Driver: overlay2           #docker存储驱动程序
  Backing Filesystem: xfs           #文件系统
  Supports d_type: true         
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file          #日志驱动程序
 Cgroup Driver: cgroupfs            #Cgroup驱动程序
 Cgroup Version: 1
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive                      #Swarm状态  
 Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
 Default Runtime: runc                 #默认runtime
 Init Binary: docker-init
 containerd version: 7b11cfaabd73bb80907dd23182b9347b4245eb5d
 runc version: v1.0.2-0-g52b36a2
 init version: de40ad0
 Security Options:                       #安全选项
  seccomp
   Profile: default
 Kernel Version: 4.18.0-305.3.1.el8.x86_64   #linux内核版本
 Operating System: CentOS Linux 8    #linux *** 作系统
 OSType: linux
 Architecture: x86_64
 CPUs: 2                              #宿主机CPU数量
 Total Memory: 1.748GiB              #宿主机内存
 Name: localhost.localdomain         #宿主机名称
 ID: XNOI:YZS3:33XD:GJ5P:LI5T:IMNW:2J2E:H737:LJNR:K2CC:FSRJ:WGLG
 Docker Root Dir: /var/lib/docker       #docker根目录
 Debug Mode: false
 Registry: https://index.docker.io/v1/      #镜像仓库
 Labels:
 Experimental: false
 Insecure Registries:                #非安全镜像仓库
  127.0.0.0/8
 Registry Mirrors:                      #镜像加速
  https://xxxxxxx.mirror.aliyuncs.com/
 Live Restore Enabled: false
4.3.1 镜像 *** 作
//从docker仓库中搜索镜像
[root@localhost ~]# docker search centos
NAME                              DEscriptION                                     STARS     OFFICIAL   AUTOMATED
centos                            The official build of CentOS.                   6904      [OK]       
ansible/centos7-ansible           Ansible on Centos7                              135                  [OK]
consol/centos-xfce-vnc            Centos container with "headless" VNC session…   131                  [OK]
jdeathe/centos-ssh                OpenSSH / Supervisor / EPEL/IUS/SCL Repos - …   121                  [OK]
centos/systemd                    systemd enabled base container.                 105                  [OK]
centos/mysql-57-centos7           MySQL 5.7 SQL database server                   92                   
imagine10255/centos6-lnmp-php56   centos6-lnmp-php56                              58                   [OK]

......
NAME			//镜像仓库源的名称
DEscriptION		//表示该镜像的功能
STARS			//表示下载热度
OFFICIAL		//是否docker官方发布
AUTOMATED		//自动构建
.....

//从docker仓库中下载镜像
[root@localhost ~]# docker pull centos 
Using default tag: latest
latest: Pulling from library/centos
a1d0c7532777: Pull complete 
Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest

//查看本地主机上的所有/指定镜像
docker images [镜像名] 	
选项:
-a 			//列出本地所有的镜像;
--digests 		//显示镜像的摘要信息;
-q 			//只显示镜像ID。

[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
centos       latest    5d0da3dc9764   2 months ago   231MB

REPOSITORY    		//镜像的仓库源
TAG           		//镜像标签
IMAGE ID      		//镜像ID
CREATED       		//镜像创建时间
SIZE          		//镜像大小

//获取镜像的详细信息
[root@localhost ~]# docker inspect centos:latest
[
    {
        "Id": "sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6",
        "RepoTags": [
            "centos:latest"
        ],
        "RepoDigests": [
            "centos@sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2021-09-15T18:20:05.184694267Z",
        "Container": "9bf8a9e2ddff4c0d76a587c40239679f29c863a967f23abf7a5babb6c2121bf1",
        "ContainerConfig": {
            "Hostname": "9bf8a9e2ddff",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
.....略

//添加镜像标签,类似于别名
[root@localhost ~]# docker tag centos:latest centos:1.1
[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
centos       1.1       5d0da3dc9764   2 months ago   231MB
centos       latest    5d0da3dc9764   2 months ago   231MB

//删除镜像
docker rmi 镜像名:标签	
选项:
-f			//强制删除

[root@localhost ~]# docker rmi centos:1.1
Untagged: centos:1.1
[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
centos       latest    5d0da3dc9764   2 months ago   231MB

//导出镜像
[root@localhost ~]# docker save -o /tmp/centos centos:latest 
[root@localhost ~]# cd /tmp
[root@localhost tmp]# ls
centos 

//载入镜像
[root@localhost ~]# docker load < /tmp/centos
Loaded image: centos:latest
4.3.2 容器 *** 作

容器创建命令

docker run		//从镜像运行一个容器
选项:
--name			//指定容器的名称,如果不指定随机给容器生成一个名称
-it			//为容器分配一个始终运行的伪终端,需要指定shell;-i保持运行状态,-t是分配伪终端,不建议run时使用
-d			//容器以守护进程的方式运行
-p 宿主机端口:容器端口	//将宿主机端口映射给容器端口
-v 宿主机目录:容器目录	//将宿主机目录挂载到容器中;直接写容器目录省略宿主机目录,将在宿主机自动创建一个目录挂载到容器中
-e			//启动容器时传递环境及其值
--rm			//容器退出时删除容器
--cpuset-cpus CPU序号	//容器能够使用哪些物理cpu
--cpu-shares 数值	//CPU共享权值(相对权重)
--memory 数值		//容器内存限制,单位b,k,m,g
--memory-swap 数值	//容器内存+交换分区大小,不能小-m的值
--restart 策略		//指定容器停止后的重启策略
	no		//容器退出时不重启
	on-failure	//容器故障退出(返回值非零)时重启
	always		//容器退出时总是重启
--network 网络名称	//容器网络设置
	bridge 		//使用桥接模式
	host		//容器使用主机的网络
	container:NAME_or_ID //使用其他容器的网路,共享IP和PORT等网络资源
	none 		//容器使用自己的网络(类似bridge);但是不进行配置,如分配veth pair 和网桥连接,配置IP等
--link 容器名称		//指定容器间的关联,可以和指定容器进行通信
//用centos镜像来创建一个叫centos01的容器
[root@localhost ~]# docker create   --name centos01  centos
03a5336c593df090c777ea1f7344cc410381b25a28884d674d2cd72d45aa5076

//使用centos镜像启动一个名为centos02的容器并分配一个bash shell的终端进入容器
[root@localhost ~]# docker run --name centos02 -it centos /bin/bash
[root@30631e320b4f /]# exit
exit

注意:
1.指定-it选项为容器分配shell后,启动容器时运行的命令将会被shell替代
2.不加-d选项的容器一旦使用exit退出容器shell,容器就终止运行;ctrl+p+q可以退出shell,容器仍将继续运行

//使用centos镜像启动一个名为centos03的容器并在后台运行
[root@localhost ~]# docker run --name centos03 -d centos
d7d3b91954d32b9cf9b9e9b2f8463c1f3cb923d69cdadf4738d7482a65f6dce3

//使用centos镜像启动一个名为centos04的容器,该容器在后台运行,访问宿主机的8080端口可以访问到容器的80端口
[root@localhost ~]# docker run --name centos04 -d -p 8080:80 centos
d147a3cf5693bc7ea8aac00ab84f06e3166a3746c252a9c14d92c61a3ed8992e

容器查看命令

docker ps		//查看容器运行状态
选项:
-a 			//显示所有的容器,包括未运行的
-q			//只显示容器id
-l			//显示最近创建的容器。
-f "筛选条件"		//根据条件过滤显示的内容

//查看所有容器状态
[root@localhost ~]# docker ps -a 
ConTAINER ID   IMAGE     COMMAND       CREATED          STATUS                      PORTS     NAMES
d147a3cf5693   centos    "/bin/bash"   32 seconds ago   Exited (0) 31 seconds ago             centos04
d7d3b91954d3   centos    "/bin/bash"   2 minutes ago    Exited (0) 2 minutes ago              centos03
30631e320b4f   centos    "/bin/bash"   3 minutes ago    Exited (0) 3 minutes ago              centos02
03a5336c593d   centos    "/bin/bash"   7 minutes ago    Created                               centos01

ConTAINER ID		//容器 ID
IMAGE			//使用的镜像
COMMAND			//启动容器时运行的命令
CREATED			//容器的创建时间
STATUS			//容器状态
状态有7种:
	created(已创建)
	restarting(重启中)
	running(运行中)
	removing(迁移中)
	paused(暂停)
	exited(停止)
	dead(死亡)
PORTS			//容器的端口信息和使用的连接类型(tcpudp)。
NAMES			//容器名称

//查看容器详细信息
[root@localhost ~]# docker inspect centos04
[
    {
        "Id": "d147a3cf5693bc7ea8aac00ab84f06e3166a3746c252a9c14d92c61a3ed8992e",
        "Created": "2021-12-01T18:24:37.775412386Z",
        "Path": "/bin/bash",
        "Args": [],
        "State": {
            "Status": "exited",
            "Running": false,
.....略

容器生命周期管理命令

docker start   容器名	//开启容器
docker stop    容器名	//停止容器
docker kill    容器名	//杀死容器
docker restart 容器名	//重启容器
docker pause   容器名	//暂停容器中所有的进程
docker unpause 容器名	//恢复容器中所有的进程

容器占用资源查看命令

docker stats  容器名	//查看容器使用资源信息
docker top    容器名	//查看容器中运行的进程信息,支持ps命令参数
docker port   容器名	//查看宿主机端口和容器端口之间的端口映射

容器日志查看命令

docker logs   容器名	//获取容器的日志信息
选项:
-f			//跟随打印最新的日志追加在最后面
-t			//显示日志打印的时间戳
--tail 数量		//只显示最新的指定数量的几条日志信息

** 容器内进程连接和命令执行**

//创建一个后台运行容器
[root@localhost ~]# docker run --name centos05 -d -it centos /bin/bash
4054570d47c1be7460546ab923f6d5e2709a0ec74775d0f6a748be1a3bc90696
[root@localhost ~]# docker ps -a 
ConTAINER ID   IMAGE     COMMAND       CREATED          STATUS                      PORTS     NAMES
4054570d47c1   centos    "/bin/bash"   5 seconds ago    Up 4 seconds                          centos05
d147a3cf5693   centos    "/bin/bash"   8 minutes ago    Exited (0) 8 minutes ago              centos04
d7d3b91954d3   centos    "/bin/bash"   10 minutes ago   Exited (0) 2 minutes ago              centos03
30631e320b4f   centos    "/bin/bash"   11 minutes ago   Exited (0) 11 minutes ago             centos02
03a5336c593d   centos    "/bin/bash"   15 minutes ago   Exited (0) 2 minutes ago              centos01

//连接到正在运行的容器进程中,默认连接到容器启动时启动的进程
[root@localhost ~]# docker attach centos05
[root@4054570d47c1 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

//不进入容器执行容器中的命令
docker exec 容器名 执行命令	
选项:
-d				//后台执行,不显示结果
-it				//为容器分配一个始终运行的伪终端,需要指定shell;-i保持运行状态,-t是分配伪终端
[root@localhost ~]# docker exec centos05 ls
bin
dev
etc
home
lib
lib64
lost+found
media
....略

//使用docker exec命令打开一个shell进入到容器中,使用exit退出shell,容器也不会终止运行
[root@localhost ~]#  docker exec -it centos05 /bin/bash
[root@4054570d47c1 /]# exit
exit
[root@localhost ~]# docker ps -a
ConTAINER ID   IMAGE     COMMAND       CREATED          STATUS                      PORTS     NAMES
4054570d47c1   centos    "/bin/bash"   4 minutes ago    Up 4 minutes                          centos05
d147a3cf5693   centos    "/bin/bash"   12 minutes ago   Exited (0) 12 minutes ago             centos04
d7d3b91954d3   centos    "/bin/bash"   14 minutes ago   Exited (0) 6 minutes ago              centos03
30631e320b4f   centos    "/bin/bash"   16 minutes ago   Exited (0) 16 minutes ago             centos02
03a5336c593d   centos    "/bin/bash"   19 minutes ago   Exited (0) 6 minutes ago              centos01

宿主机和容器文件复制命令

docker cp 容器名:容器文件路径 宿主机路径	//将容器中的文件复制到宿主机中

docker cp 宿主机路径 容器名:容器文件路径	//将宿主机中的文件复制到容器中

容器导出和导入命令

docker export 容器名 > 导出的容器文件名	//容器导出

docker import 导出的容器文件名 镜像:标签	//容器导入,导入之后只会生成镜像

容器删除命令

docker rm 容器名			//删除容器,无法删除运行状态下的容器
选项:
-f				//强制,可以删除运行状态下的容器

[root@localhost ~]# docker rm centos01
centos01
[root@localhost ~]# docker rm centos05
Error response from daemon: You cannot remove a running container 4054570d47c1be7460546ab923f6d5e2709a0ec74775d0f6a748be1a3bc90696. Stop the container before attempting removal or force remove
[root@localhost ~]# docker rm -f  centos05
centos05
[root@localhost ~]# docker ps -a
ConTAINER ID   IMAGE     COMMAND       CREATED          STATUS                      PORTS     NAMES
d147a3cf5693   centos    "/bin/bash"   15 minutes ago   Exited (0) 15 minutes ago             centos04
d7d3b91954d3   centos    "/bin/bash"   16 minutes ago   Exited (0) 9 minutes ago              centos03
30631e320b4f   centos    "/bin/bash"   18 minutes ago   Exited (0) 18 minutes ago             centos02

//批量删除所有容器
[root@localhost ~]# docker rm `docker ps -qa`
d147a3cf5693
d7d3b91954d3
30631e320b4f
[root@localhost ~]# docker ps -a
ConTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5636967.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存