Docker部署及基础用法

Docker介绍

什么是Docker

在这里插入图片描述
Docker是容器技术的一个前端工具,容器是内核的一项技术,Docker只是把这一项技术的使用得以简化,使之普及而已

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

Docker是通过内核虚拟化技术(namespaces(命令空间)及cgroups(控制组)等)来提供容器的资源隔离与安全保障等,由于Docker通过操作系统层的虚拟化实现隔离,所以Docker容器在运行时,不需要虚拟机(VM)额外的操作系统开销,提高资源利用率。

OCI&OCF

OCI

开源容器方案

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

OCF

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

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

docker提供了一个专门容纳容器镜像的站点:https://hub.docker.com

Docker镜像与镜像仓库的关系

  • 镜像仓库:是存放镜像的场所,dockerhub是最大的开源仓库,可以通过docker search 查找所需镜像并通过docker pull拉取
  • 镜像:docker 真正的操作对象
  • 容器:docker run 启动镜像会变成容器,容器顶层为一个可操作层,修改不会影响镜像。每个镜像可以启动生成多个容器。
  • 镜像是静态的,而容器是动态的,容器有其生命周期,镜像与容器的关系类似于程序与进程的关系。镜像类似于文件系统中的程序文件,而容器则类似于将一个程序运行起来的状态,也即进程。所以容器是可以删除的,容器被删除后其镜像是不会被删除的。

下图中

  • 圆饼为镜像文件,可以有很多的版本
  • 长方形为镜像仓库
    在这里插入图片描述

Docker对象

使用docker时,您正在创建和使用镜像、容器、网络、卷、插件和其他对象。

  • 镜像
    • 镜像是一个只读模板,其中包含创建docker容器的说明。
    • 通常,一个镜像基于另一个镜像,并进行了一些额外的定制。
    • 您可以创建自己的镜像,也可以只使用其他人创建并在注册表中发布的镜像。
  • 容器
    • 容器是镜像的可运行实例。
    • 您可以使用docker API或CLI创建、运行、停止、移动或删除容器。
    • 您可以将容器连接到一个或多个网络,将存储连接到容器,甚至可以基于其当前状态创建新镜像。

Docker工作原理

当您请求 Docker 运行容器时,Docker 会在您的计算机上设置一个资源隔离的环境。然后 Docker 会将打包的应用程序和关联的文件复制到 Namespace 内的文件系统中,此时环境的配置就完成了。之后 Docker 会执行您指定的命令运行应用程序。
Docker 在运行时分为 Docker 引擎(服务端守护进程) 和 客户端工具,我们日常使用各种 docker 命令,其实就是在使用 客户端工具 与 Docker 引擎 进行交互。

Docker部署

Docker安装
mirrors.tuna.tsinghua.edu.cn
mirrors.aliyun.com
mirrors.163.com
download.docker.com

//配置docker源仓库
sudo curl -o docker-ce.repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
sudo sed -i 's@https://download.docker.com@https://mirrors.tuna.tsinghua.edu.cn/docker-ce@g' docker-ce.repo

//安装
sudo yum -y install docker-ce

//启动
sudo systemctl start docker

//docker 加速
sudo tee /etc/docker/daemon.json << 'EOF'
{
  "registry-mirrors": ["https://j3m2itm3.mirror.aliyuncs.com"]
}
EOF

sudo systemctl restart docker
Docker中国区官方镜像
https://registry.docker-cn.com

网易
http://hub-mirror.c.163.com

ustc 
https://docker.mirrors.ustc.edu.cn
[root@localhost docker]# 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:38:53 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:37:17 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
  
[root@localhost docker]# docker info
Client:
 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:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 0
 Server Version: 20.10.11
 Storage Driver: overlay2
  Backing Filesystem: xfs
  Supports d_type: true
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 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
 Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 7b11cfaabd73bb80907dd23182b9347b4245eb5d
 runc version: v1.0.2-0-g52b36a2
 init version: de40ad0
 Security Options:
  seccomp
   Profile: default
 Kernel Version: 3.10.0-862.el7.x86_64
 Operating System: CentOS Linux 7 (Core)
 OSType: linux
 Architecture: x86_64
 CPUs: 2
 Total Memory: 3.685GiB
 Name: localhost.localdomain
 ID: SOWL:K5KU:KZXR:ZXI2:ZGSP:V3QL:BLKS:5LEK:EAB4:UXTH:4LWQ:XECU
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Registry Mirrors:
  https://j3m2itm3.mirror.aliyuncs.com/
 Live Restore Enabled: false

Docker 事件状态

在这里插入图片描述

Docker常用操作

命令功能
docker search在Docker 中心搜索镜像
docker pull从注册表中拉取镜像或存储库
docker images镜像列表
docker create创建一个新的容器
docker start启动一个或多个停止的容器
docker run在新容器中运行命令
docker ps列表容器
docker logs获取容器的日志
docker restart重启一个容器
docker stop停止一个或多个正在运行的容器
docker kill杀死一个或多个正在运行的容器
docker rm移除一个或多个容器
docker exec在正在运行的容器中运行命令
docker info显示整个系统的信息
docker attach连接到正在运行的容器(进入容器;前台运行,退出则容器停止)
docker inspect返回Docker对象的详细信息(进入容器;退出容器不会停止)

案例

docker search

搜索镜像

[root@localhost ~]# docker search kali
NAME                                   DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
kalilinux/kali-rolling                 Official Kali Linux Docker image (weekly sna…   358                  
kalilinux/kali                         Image built from the last snapshot of the of…   98                   
linuxkonsult/kali-metasploit           Kali base image with metasploit                 71                   [OK]
kalilinux/kali-bleeding-edge           Same as kali-rolling with kali-bleeding-edge…   35                   
booyaabes/kali-linux-full              Kali image with kali-linux-full metapackage …   31                   [OK]
jasonchaffee/kali-linux                Kali Linux Docker Container with the kali-li…   21                   [OK]
lukaszlach/kali-desktop                Kali Linux desktop running in Docker on any18                   [OK]
donaldrich/kali-linux                  Multi-arch Kali-rolling base image with kali…   16                   
brimstone/kali                         Image for various bits of Kali Linux            11                   [OK]
toolisticon/kalilinux                  Kali Linux (full package)                       8                    [OK]
kalinon/comicstreamer                  ComicStreamer is a media server app for shar…   4                    [OK]
isaudits/kali                          Kali Linux with installed toolset; separate …   3                    
kalilinux/kali-experimental            Image built from the kali-dev + kali-experim…   2                    
kalilinux/kali-dev                     Image built from the kali-dev development re…   2                    
thomasleplus/kali                      Kali Linux as a docker container.               2                    
kalisio/kano                           Kano Application                                1                    
blairy/kali_patched                    Fully patched Kali Docker Image.                0                    
artis3n/kali                           Source + Readme: https://github.com/artis3n/0                    
haraldaarz/kali_xfce_top10             Kali with xfce, and kali-tools-top10. Used i…   0                    
kalisio/kapp                           Kalisio application template                    0                    
pant/kali                              Clean Kali Installation-Update from official…   0                    
kaliti/kaliti                          This container is used to run bitbucket pipe…   0                    
kalisio/aktnmap                        Akt'n'Map application                           0                    
chiphwang/kali_metasploit_msfconsole                                                   0                    
pidof/kalister                         kali linux ... updating to my personal env a…   0   

docker pull

从Registry仓库中下载镜像

[root@localhost ~]# docker pull httpd
Using default tag: latest
latest: Pulling from library/nginx
eff15d958d66: Pull complete 
1e5351450a59: Pull complete 
2df63e6ce2be: Pull complete 
9171c7ae368c: Pull complete 
020f975acd28: Pull complete 
266f639b35ad: Pull complete 
Digest: sha256:097c3a0913d7e3a5b01b6c685a60c03632fc7a2b50bc8e35bcaa3691d788226e
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest

docker images

显示镜像列表

[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
httpd        latest    ad17c88403e2   12 days ago   143MB

docker create

创建容器

[root@localhost ~]# docker create nginx
599606d03bf31b19ac13e3507f94949e26fcf3531b683acd2345b188e4679478

[root@localhost ~]# docker create httpd
Unable to find image 'httpd:latest' locally
latest: Pulling from library/httpd
eff15d958d66: Already exists 
ba1caf8ba86c: Pull complete 
ab86dc02235d: Pull complete 
0d58b11d2867: Pull complete 
e88da7cb925c: Pull complete 
Digest: sha256:1d71eef54c08435c0be99877c408637f03112dc9f929fba3cccdd15896099b02
Status: Downloaded newer image for httpd:latest
aa20e785c44ffb1e1640607a28900c1053561e07da493d2005eed57140c1b22d

docker ps

查看本地容器进程

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

示例:
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS    PORTS     NAMES
599606d03bf3   nginx     "/docker-entrypoint.…"   58 seconds ago   Created             silly_hawking
8a279920b42e   nginx     "/docker-entrypoint.…"   2 hours ago      Created             nginx01

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

docker run

容器启动

docker run 选项 容器 命令 
选项:
	--name		#指定容器的名称,如果不指定随机给容器生成一个名称
	-i			#启动一个可交互容器,并持续打开标准输出
	-t			#表示使用终端关联到容器的标准输入输出上
	-d			#将容器放在后台执行
	-rm			#删除容器
    -p	宿主机端口:容器端口	#将宿主机端口映射给容器端口
    -v	宿主机目录:容器目录	#将宿主机目录挂载到容器中

示例:
//使用nginx镜像启动一个名为nginx01的容器
[root@loclhost ~]# docker run --name nginx01 nginx 
...........

//使用nginx镜像启动一个名为nginx01的容器并分配一个bash shell的终端进入容器
[root@localhost ~]# docker run -it nginx01 /bin/bash
root@78a11416ecae:/# exit
exit

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

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

//查看所有容器状态
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS                       PORTS                                   NAMES
e6ad39814957   httpd     "httpd-foreground"       3 minutes ago    Up 3 minutes                 0.0.0.0:8080->80/tcp, :::8080->80/tcp   httpd01
5917c71a32ad   nginx     "/docker-entrypoint.…"   5 minutes ago    Up 5 minutes                 80/tcp                                  nginx02
599606d03bf3   nginx     "/docker-entrypoint.…"   26 minutes ago   Created                                                              silly_hawking
8a279920b42e   nginx     "/docker-entrypoint.…"   2 hours ago      Up 3 seconds                 80/tcp                                  nginx01




//停止容器
[root@localhost ~]# docker stop nginx01
nginx01
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS                       PORTS                                   NAMES
8a279920b42e   nginx     "/docker-entrypoint.…"   2 hours ago      Exited (0) 5 seconds ago                                           nginx01

//停止所有容器
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED       STATUS          PORTS     NAMES
5917c71a32ad   nginx     "/docker-entrypoint.…"   3 hours ago   Up 9 seconds    80/tcp    nginx02
8a279920b42e   nginx     "/docker-entrypoint.…"   5 hours ago   Up 11 seconds   80/tcp    nginx01
[root@localhost ~]# docker stop $(docker ps -aq)
e6ad39814957
5917c71a32ad
8a279920b42e
[root@localhost ~]# docker ps 
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

//启动容器
[root@localhost ~]# docker start nginx01
nginx01
[root@localhost ~]# docker ps 
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                                   NAMES
8a279920b42e   nginx     "/docker-entrypoint.…"   2 hours ago      Up 3 seconds    80/tcp                                  nginx01

//重启容器
[root@localhost ~]# docker restart nginx01
nginx01
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED       STATUS          PORTS     NAMES
8a279920b42e   nginx     "/docker-entrypoint.…"   5 hours ago   Up 13 seconds   80/tcp    nginx01

容器生命周期管理命令

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

docker logs

容器日志查看命令

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

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED       STATUS          PORTS     NAMES
8a279920b42e   nginx     "/docker-entrypoint.…"   5 hours ago   Up 13 seconds   80/tcp    nginx01
[root@localhost ~]# docker logs 8a279920b42e

[root@localhost ~]# docker logs nginx01 --tail 5
2021/12/01 14:21:40 [notice] 1#1: OS: Linux 3.10.0-862.el7.x86_64
2021/12/01 14:21:40 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2021/12/01 14:21:40 [notice] 1#1: start worker processes
2021/12/01 14:21:40 [notice] 1#1: start worker process 24
2021/12/01 14:21:40 [notice] 1#1: start worker process 25

docker rm

容器删除命令

docker rm 容器名			#删除容器,无法删除运行状态下的容器
选项:
	-f					#强制,可以删除运行状态下的容器
示例:
//删除aa69d845c204容器
[root@localhost ~]# docker stop aa69d845c204
aa69d845c204
[root@localhost ~]# docker rm aa69d845c204
aa69d845c204

//批量删除所有容器
[root@localhost ~]# docker rm $(docker ps -aq)
e6ad39814957
5917c71a32ad

docker exec

不进入容器执行容器中的命令

docker exec 容器名 执行命令	#不进入容器执行容器中的命令
选项:
	-d				#后台执行,不显示结果
	-it				#为容器分配一个始终运行的伪终端,需要指定shell;-i保持运行状态,-t是分配伪终端

示例:
//不进入容器执行容器中的ls命令
[root@localhost ~]# docker exec nginx01 ls 
bin
boot
dev
......

//使用docker exec命令打开一个shell进入到容器中,使用exit退出shell,容器也不会终止运行
[root@localhost ~]# docker exec -it nginx01 /bin/bash
root@8a279920b42e:/# ls 
bin   dev                  docker-entrypoint.sh  home  lib64  mnt  proc  run   srv  tmp  var
boot  docker-entrypoint.d  etc                   lib   media  opt  root  sbin  sys  usr
root@8a279920b42e:/# exit
exit

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED       STATUS          PORTS     NAMES
8a279920b42e   nginx     "/docker-entrypoint.…"   5 hours ago   Up 10 minutes   80/tcp    nginx01
[root@localhost ~]# 

docker inspect

查看容器详细信息

docker inspect 容器名	#查看容器详细信息

示例:
[root@localhost ~]# docker inspect httpd01
					......"Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.3",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
					......[root@localhost ~]# curl 172.17.0.3
<html><body><h1>It works!</h1></body></html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值