Docker基本用法

什么是docker

docker中的容器:

lxc --> libcontainer --> runC
在这里插入图片描述

OCI和OCF

OCI

Open Container-initiative

  • 由Linux基金会主导于2015年6月创立
  • 旨在围绕容器格式和运行时制定一个开放的工业化标准
  • 包含两个规范
    • the Runtime Specification(runtime-spec)(运行规范)
    • the Image Specification(image-spec)(镜像规范)

OCF

Open Container Format(打开容器格式)

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

  • 容器作为runC的子进程启动,可以嵌入到各种其他系统中,而不需要运行守护进程
  • runC是基于libcontainer构建的,同样的容器技术为数百万的Docker引擎安装提供了动力

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

Docker架构

在这里插入图片描述

现实工作中Client客户端和Docker_HOST服务端是在一台主机上的,是不会使用本地docker管理其他主机上的容器的。

Registry:这个是容器仓库,里面放着各种软件的容器仓库,软件容器仓库中又放着各种版本的镜像文件

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

docker对象

当你使用Docker容器时,你可以创建和使用图像、容器、网络、卷、插件和其他对象

  • IMAGES(镜像)

    • 镜像是一个只读的,用来创建容器的模板
    • 通常,一个镜像是基于另外一个镜像的做的,加上一些自定义的操作
    • 您可以创建自己的映像,也可以只使用其他人创建并在注册表中发布在官网仓库中的镜像
  • CONTAINERS(容器)

    • 一个容器时一个镜像运行起来生成的
    • 您可以通过docker AP(一种接口)I或CLI(命令行功能)创建、运行、停止、移动或删除容器
    • 你可以将容器连接到一个或多个网络,附加存储到里面,就是将容器的数据挂载到那个存储中不放在本地。基于当前的状态创建一个新镜像,这里的状态是指安装了某一个服务的情况

Docker的安装和使用

//下载docker源
[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   1626      0  0:00:01  0:00:01 --:--:--  1626

//修改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 -y install docker-ce

docker加速

docker-ce的配置文件是/etc/docker/daemon.json,此文件默认不存在,需要我们手动创建并进行配置,而docker的加速就是通过配置此文件来实现的。

//启动docker
//启动docker后会自动生成/etc/docker目录
[root@localhost ~]# systemctl enable --now docker
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.
[root@localhost ~]# ll /etc/docker/
总用量 4
-rw-------. 1 root root 244 12月  2 12:14 key.json

//配置阿里云加速器
[root@localhost ~]# tee /etc/docker/daemon.json <<-'EOF'
> {
>   "registry-mirrors": ["https://j7nfsalu.mirror.aliyuncs.com"]
> }
> EOF
{
  "registry-mirrors": ["https://j7nfsalu.mirror.aliyuncs.com"]
}
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl restart docker
//查看docker信息
[root@localhost ~]# 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.runtime.v1.linux runc io.containerd.runc.v2
 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: 4.18.0-305.3.1.el8.x86_64
 Operating System: CentOS Linux 8
 OSType: linux
 Architecture: x86_64
 CPUs: 2
 Total Memory: 1.748GiB
 Name: localhost
 ID: 6ZZS:6J2I:UR4R:BD3B:UIRQ:GYNP:TPKN:VFQI:NBJ5:U6EV:TNBK:O45Y
 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://j7nfsalu.mirror.aliyuncs.com/
 Live Restore Enabled: false

Docker常用操作

命令功能
docker searchSearch the Docker Hub for images(在docker hub官网上搜索镜像)
docker pullPull an image or a repository from a registry(从registry也就是官网拉取一个镜像到本地来)
docker imagesList images (列出本地镜像)
docker createCreate a new conntainer (创建一个容器,镜像可以是本地的也可以是网络上的)
docker startStart one or more stopped containers(启动容器)
docker runRun a command in a new container(创建一个容器,并且创建后就自动启动)
docker attachAttach to a runninng container (附加到容器,并让容器在前台运行,但是不能做任何操作)
docker psList containers(查看此时正在运行的容器)
docker logsFetch the logs of a container (查看容器的日志)
docker restartRestart a container(重启容器)
docker stopStop one or more running containers (停止容器 -15)
docker killKill one or more running containers(强制杀死容器) -9
docker rmRemove onne or more containers (删除容器)
docker execRun a command in a running container (进入到容器,)
docker infoDisplay system-wide information(查看docker的信息)
docker inspectReturn low-level information on Docker objects(显示容器的详细信息)
  • docker search
[root@localhost ~]# docker search nginx
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
nginx                             Official build of Nginx.                        15899     [OK]       
jwilder/nginx-proxy               Automated Nginx reverse proxy for docker con…   2098                 [OK]
richarvey/nginx-php-fpm           Container running Nginx + PHP-FPM capable of…   820                  [OK]
jc21/nginx-proxy-manager          Docker container for managing Nginx proxy ho…   285                  
linuxserver/nginx                 An Nginx container, brought to you by LinuxS…   160                  

#STARS受欢迎程度   OFFICIAL官方提供
  • docker pull
    从官网拉取一个镜像,如果不指定版本号,那么就拉取最新版本的
[root@localhost ~]# docker pull nginx
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
nginx        latest    ea335eea17ab   2 weeks ago   141MB
  • docker create
    创建一个容器,如果本地没有镜像就从网上拉取
//本地镜像创建容器
[root@localhost ~]# docker create nginx
c34e7daf645fda6ff440ae9d9dd2b8ed78f4d7756b473ca5226d12e79350a24a

//从网络上拉取镜像创建容器
[root@localhost ~]# docker create busybox
Unable to find image 'busybox:latest' locally
latest: Pulling from library/busybox
3aab638df1a9: Pull complete 
Digest: sha256:52817dece4cfe26f581c834d27a8e1bcc82194f914afe6d50afad5a101234ef1
Status: Downloaded newer image for busybox:latest
a85316c6c0f9adb5102230be80fb2df12869c6d495523d39098a1d342c050457
  • docker start
    启动容器
//列出所有容器
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS    PORTS     NAMES
a85316c6c0f9   busybox   "sh"                     2 minutes ago   Created             relaxed_hamilton
c34e7daf645f   nginx     "/docker-entrypoint.…"   3 minutes ago   Created             wonderful_stonebraker

[root@localhost ~]# docker start c34e7daf645f
c34e7daf645f

[root@localhost ~]# docker ps 		//列出正在运行的容器
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS     NAMES
c34e7daf645f   nginx     "/docker-entrypoint.…"   3 minutes ago   Up 4 seconds   80/tcp    wonderful_stonebraker
  • docker restart
    重新启动容器
[root@localhost ~]# docker restart c34e7daf645f
c34e7daf645f
[root@localhost ~]# docker ps 
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS     NAMES
c34e7daf645f   nginx     "/docker-entrypoint.…"   5 minutes ago   Up 2 seconds   80/tcp    wonderful_stonebraker
  • docker attach
    让容器在前台运行,此时是不能做任何操作的,如果这个时候退出则服务也会退出停止
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS              PORTS     NAMES
c34e7daf645f   nginx     "/docker-entrypoint.…"   6 minutes ago   Up About a minute   80/tcp    wonderful_stonebraker

[root@localhost ~]# docker attach c34e7daf645f
^C2021/12/02 05:37:21 [notice] 1#1: signal 2 (SIGINT) received, exiting
Ctrl+c退出
  • docker run
[root@localhost ~]# docker run -it busybox /bin/sh
/ # ls
bin   dev   etc   home  proc  root  sys   tmp   usr   var
/ # exit
  • docker rm
    删除容器,需要注意的是删除容器只能删除不在运行的,如果容器在运行需要先停止再删除,或者docker rm -f 强制删除
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS                     PORTS     NAMES
6a0576257504   busybox   "/bin/sh"                2 minutes ago    Exited (0) 2 minutes ago             confident_spence
a85316c6c0f9   busybox   "sh"                     9 minutes ago    Created                              relaxed_hamilton
c34e7daf645f   nginx     "/docker-entrypoint.…"   10 minutes ago   Exited (0) 3 minutes ago             wonderful_stonebraker

[root@localhost ~]# docker rm 6a0576257504
6a0576257504
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS                     PORTS     NAMES
a85316c6c0f9   busybox   "sh"                     9 minutes ago    Created                              relaxed_hamilton
c34e7daf645f   nginx     "/docker-entrypoint.…"   10 minutes ago   Exited (0) 3 minutes ago             wonderful_stonebraker
  • docker inspect
    查看容器详细信息
[root@localhost ~]# docker inspect c34e7daf645f
[
    {
        "Id": "c34e7daf645fda6ff440ae9d9dd2b8ed78f4d7756b473ca5226d12e79350a24a",
        "Created": "2021-12-02T05:30:16.469655359Z",
        "Path": "/docker-entrypoint.sh",
        "Args": [
            "nginx",
            "-g",
            "daemon off;"
        ],
......
"Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:02",
                    "DriverOpts": null
                }
            }
  • docker logs
    查看容器的日志文件
[root@localhost ~]# docker logs c34e7daf645f
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2021/12/02 05:33:42 [notice] 1#1: using the "epoll" event method
2021/12/02 05:33:42 [notice] 1#1: nginx/1.21.4
2021/12/02 05:33:42 [notice] 1#1: built by gcc 10.2.1 20210110 (Debian 10.2.1-6) 
2021/12/02 05:33:42 [notice] 1#1: OS: Linux 4.18.0-305.3.1.el8.x86_64
2021/12/02 05:33:42 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
  • exec
    进入到容器中(最常用),退出也不会停止运行
[root@localhost ~]# docker exec -it c34e7daf645f /bin/bash
root@c34e7daf645f:/# 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@c34e7daf645f:/# exit
exit
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值