docker是一个用Go语言实现的开源项目,可以让我们方便的创建和使用容器,docker将程序以及程序所有的依赖都打包到docker container,这样你的程序可以在任何环境都会有一致的表现,这里程序运行的依赖也就是容器就好比集装箱,容器所处的操作系统环境就好比货船或港口,程序的表现只和集装箱有关系(容器),和集装箱放在哪个货船或者哪个港口(操作系统)没有关系。
此外docker的另一个好处就是快速部署,这是当前互联网公司最常见的一个应用场景,一个原因在于容器启动速度非常快,另一个原因在于只要确保一个容器中的程序正确运行,那么你就能确信无论在生产环境部署多少都能正确运行。
你使用docker的时候就等于你正在创建和使用镜像、容器、网络、插件功能 和其他对象
- 镜像
- 镜像是一个包含创建docker容器的说明只读模板。
- 正常情况下,一个图像会基于另一个镜像的基础上进行一些额外的配置
- 你可以创建自己的镜像,也可以使用他人创建并且在镜像仓库中发布的镜像
- 容器
- 容器是图像的可运行的实体
- 你可以使用docker API或CLI创建、运行、停止、移动或删除容器。
- 您可以将容器连接到一个或多个网络,为其附加存储,甚至基于其当前状态创建新的映像。
[root@yyx2 ~]# cd /etc/yum.repos.d/ //进入路径
[root@yyx2 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 14648 0 --:--:-- --:--:-- --:--:-- 14648
[root@yyx2 yum.repos.d]# sed -i 's@https://download.docker.com@https://mirrors.tuna.tsinghua.edu.cn/docker-ce@g' docker-ce.repo
[root@yyx2 yum.repos.d]#yum -y install docker-ce //安装docker
4.docker加速
docker-ce的配置文件是/etc/docker/daemon.json,此文件默认不存在,需要我们手动创建并进行配置,而docker的加速就是通过配置此文件来实现的。
docker的加速有多种方式:
- docker cn
- 中国科技大学加速器
- 阿里云加速器(需要通过阿里云开发者平台注册帐号,免费使用个人私有的加速器)
[root@yyx2 yum.repos.d]# systemctl start docker [root@yyx2 yum.repos.d]# cat >/etc/docker/daemon.json <5.docker的使用{ > "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn/"] > } > EOF [root@yyx2 yum.repos.d]# systemctl restart docker [root@yyx2 yum.repos.d]# ls /etc/docker daemon.json key.json [root@yyx2 yum.repos.d]# docker version //查看docker的版本 Client: Docker Engine - Community Version: 20.10.14 API version: 1.41 Go version: go1.16.15 Git commit: a224086 Built: Thu Mar 24 01:47:44 2022 OS/Arch: linux/amd64 Context: default Experimental: true Server: Docker Engine - Community Engine: Version: 20.10.14 API version: 1.41 (minimum version 1.12) Go version: go1.16.15 Git commit: 87a90dc Built: Thu Mar 24 01:46:10 2022 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.5.11 GitCommit: 3df54a852345ae127d1fa3092b95168e4a88e2f8 runc: Version: 1.0.3 GitCommit: v1.0.3-0-gf46b6ba docker-init: Version: 0.19.0 GitCommit: de40ad0
| 命令 | 功能 |
|---|---|
| docker search | 在Docker Hub中搜索镜像 |
| docker pull | 从镜像仓库中拉取或更新指定镜像 |
| docker images | 列出本地所有镜像 |
| docker create | 创建新的容器 |
| docker start | 启动一个或多个停止的容器 |
| docker run | 在新容器中运行命令 |
| docker attach | 连接到正在运行的容器 |
| docker ps | 列出所有容器 |
| docker logs | 获取容器的日志 |
| docker restart | 重启容器 |
| docker stop | 停止一个或多个正在运行的容器 |
| docker kill | 终止一个或多个正在运行的容器 |
| docker rm | 删除一个或多个容器 |
| docker exec | 在运行容器中运行命令 |
| docker info | 显示系统范围的信息 |
| docker inspect | 返回Docker对象的底层信息 |
//docker search 在Docker Hub中搜索镜像 [root@yyx2 ~]# docker search mysql NAME DESCRIPTION STARS OFFICIAL AUTOMATED mysql MySQL is a widely used, open-source relation… 12455 [OK] mariadb MariaDB Server is a high performing open sou… 4800 [OK] mysql/mysql-server Optimized MySQL Server Docker images. Create… 921 [OK] percona Percona Server is a fork of the MySQL relati… 575 [OK] phpmyadmin phpMyAdmin - A web interface for MySQL and M… 512 [OK] //docker pull 从镜像仓库中拉取或更新指定镜像 [root@yyx2 ~]# docker pull mysql Using default tag: latest latest: Pulling from library/mysql 72a69066d2fe: Pull complete 93619dbc5b36: Pull complete 99da31dd6142: Pull complete 626033c43d70: Pull complete 37d5d7efb64e: Pull complete ac563158d721: Pull complete d2ba16033dad: Pull complete 688ba7d5c01a: Pull complete 00e060b6d11d: Pull complete 1c04857f594f: Pull complete 4d7cfa90e6ea: Pull complete e0431212d27d: Pull complete Digest: sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709 Status: Downloaded newer image for mysql:latest docker.io/library/mysql:latest //docker images列出本地所有镜像 [root@yyx2 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql latest 3218b38490ce 4 months ago 516MB //docker create创建新的容器 [root@yyx2 ~]# docker create --name yyx -p 80:80 mysql //-p为不启动 10719e328a30bda5dbfcb18b7706bf896849a207b81b698d91bcbcec5c2d28a3 [root@yyx2 ~]# docker create --name yyxnb -p 80:80 httpd 75c71925221c998f2e30c047ebfce584e1e05b9407af2b2a675cb4130d75c11b //docker start启动一个或多个停止的容器 [root@yyx2 ~]# docker start yyxnb yyxnb [root@yyx2 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 75c71925221c httpd "httpd-foreground" 12 seconds ago Up 2 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp yyxnb //docker run在新容器中运行命令 [root@yyx2 ~]# docker run -it --name yyx busybox /bin/sh Unable to find image 'busybox:latest' locally latest: Pulling from library/busybox 5cc84ad355aa: Pull complete Digest: sha256:5acba83a746c7608ed544dc1533b87c737a0b0fb730301639a0179f9344b1678 Status: Downloaded newer image for busybox:latest / # exit //交互模式,exit为退出并同时停止容器 //docker attach附加到正在运行的容器 [root@yyx2 ~]# docker start yyx yyx [root@yyx2 ~]# docker attach yyx / # exit //退出则停止容器 //docker ps列出所有容器 [root@yyx2 ~]# docker ps -a //-a为所有的容器,包括未启动的 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 10719e328a30 mysql "docker-entrypoint.s…" About a minute ago Created yyx //docker logs获取容器的日志 [root@yyx2 ~]# docker logs yyxnb AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message [Sun Apr 24 23:57:30.813160 2022] [mpm_event:notice] [pid 1:tid 139830528826688] AH00489: Apache/2.4.52 (Unix) configured -- resuming normal operations [Sun Apr 24 23:57:30.814179 2022] [core:notice] [pid 1:tid 139830528826688] AH00094: Command line: 'httpd -D FOREGROUND' [Sun Apr 24 23:58:24.395197 2022] [mpm_event:notice] [pid 1:tid 139830528826688] AH00492: caught SIGWINCH, shutting down gracefully AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message [Sun Apr 24 23:58:26.405019 2022] [mpm_event:notice] [pid 1:tid 140377602886976] AH00489: Apache/2.4.52 (Unix) configured -- resuming normal operations [Sun Apr 24 23:58:26.405103 2022] [core:notice] [pid 1:tid 140377602886976] AH00094: Command line: 'httpd -D FOREGROUND' //docker restart重启容器 [root@yyx2 ~]# docker restart yyxnb yyxnb [root@yyx2 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 75c71925221c httpd "httpd-foreground" About a minute ago Up 2 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp yyxnb //docker stop停止一个或多个正在运行的容器 可以用id或者名字 [root@yyx2 ~]# docker start 10719e328a30 10719e328a30 [root@yyx2 ~]# docker stop yyxnb yyxnb //docker kill终止一个或多个正在运行的容器 [root@yyx2 ~]# docker kill yyxnb yyxnb [root@yyx2 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES //docker rm删除一个或多个容器 [root@yyx2 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 75c71925221c httpd "httpd-foreground" 3 minutes ago Up 39 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp yyxnb 10719e328a30 mysql "docker-entrypoint.s…" 11 minutes ago Exited (1) 5 minutes ago yyx [root@yyx2 ~]# docker rm yyx //删除yyx容器 yyx [root@yyx2 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 75c71925221c httpd "httpd-foreground" 3 minutes ago Up 54 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp yyxnb //docker exec在运行容器中运行命令 [root@yyx2 ~]# docker start yyx yyx [root@yyx2 ~]# docker exec -it yyx /bin/sh / # exit //docker info显示系统范围的信息 [root@yyx2 yum.repos.d]# docker info Client: Context: default Debug Mode: false Plugins: app: Docker App (Docker Inc., v0.9.1-beta3) buildx: Docker Buildx (Docker Inc., v0.8.1-docker) scan: Docker Scan (Docker Inc., v0.17.0) Server: Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 0 Server Version: 20.10.14 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: 3df54a852345ae127d1fa3092b95168e4a88e2f8 runc version: v1.0.3-0-gf46b6ba init version: de40ad0 Security Options: seccomp Profile: default Kernel Version: 4.18.0-365.el8.x86_64 Operating System: CentOS Stream 8 OSType: linux Architecture: x86_64 CPUs: 1 Total Memory: 777.4MiB Name: yyx2 ID: G5TZ:CAED:MIWK:V63S:O4YO:MQ27:RRQM:OGFG:I5TV:YSXT:KXZO:RDW3 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://docker.mirrors.ustc.edu.cn/ Live Restore Enabled: false



