01@Docker安装及基础命令使用详解

文章目录

Docker基础使用

一、Docker基础

Docker简化了环境部署和配置,实现“一次构建,处处运行”,避免了因运行环境不一致而导致的异常

1、Docker的简述

Docker是一个开源的应用容器引擎,使用Go语言开发,基于Linux内核的CGroup、Namespace、Union FS等技术实现的一种系统级虚拟化技术

Docker 是一个开发、发布和运行应用程序的开放平台。
Docker使您能够将应用程序与基础架构分离,以便快速交付软件。有了 Docker,你可以像管理应用程序一样管理你的基础设施。通过利用 Docker 快速发布、测试和部署代码的方法,您可以显著减少编写代码和在生产环境中运行它之间的延迟

2、Docker的优势

# Docker在开发与运维中的优势

1#更快的交付和部署:
     使用Docker,开发人员可以使用镜像来快速构建一套标准的开发环境;开发完之后,测试和运维人员可以直接使用完全相同的环境来部署代码。只要是开发测试过的代码,就可以确保在生产环境无缝运行。
     Docker可以快速创建和删除容器,实现快速迭代,节约开发、测试及部署的时间。


2#更高效的利用资源:
     运行Docker容器不需要额外的虚拟化管理程序的支持,Docker是内核级的虚拟化,可以实现更高的性能,同时对资源的额外需求很低,与传统的虚拟机方式相比,Docker的性能要提高1 ~ 2个数量级



3#更轻松的迁移和扩展:
     Docker容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑等等,同时支持主流的操作系统发行版本。这种兼容性能让用户可以在不同的平台之间轻松的迁移应用。



4#更轻松的管理和更新:
     使用Dockerfile,只需要小小的配置修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的容器管理

3、Docker与虚拟机的区别

1》Docker容器启动很快,启动和停止可以实现秒级,相比传统的虚拟机方式(分钟级)要快速很多。
2》Docker容器对系统资源需求很少,一台主机上可以同时运行数千个Docker容器。
3》Docker通过类似git设计理念的操作来方便用户获取、分发和更新应用镜像,存储复用,增量更新。
4》Docker通过Dockerfile支持灵活的自动化创建和部署机制,可以提高工作效率,并标准化流程

*特性**容器**虚拟机*
启动速度秒级分钟级
性能接近原生较好
内存MB级GB级
硬盘适应MB级GB级
运行密度单台主机支持上千个单台主机支持几个
隔离性安全隔离完全隔离
迁移优秀一般

4、Docker概念

1》镜像:启动容器模板
2》容器:对外提供服务的实例
3》仓库:存放镜像的地方

1#镜像(Image)
  镜像,可以理解为一个模板,这个模版提供了器运行时所需的程序、库、资源、配置等必要文件。只要有了这个模版,我们可以在任何装有docker的系统上运行容器,也就是所谓的Docker是build once,run everywhere。
 



2#容器(Container)
  容器,就是依据镜像这个模板创建出来的实体。
  容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。因此容器可以拥有自己的root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户ID 空间。
  容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。
 


3#仓库(Repository)
  仓库,故名思义就是存放东西的,这里的“东西”就是Image。用户可以通过仓库拉取镜像运行容器,也可以构建镜像存放在仓库中。
  仓库可分为:公共仓库和私有仓库,所有用户都能使用的仓库称为公共仓库,而私有仓库则是个人或者团队自己搭建,只供个人或者团队使用



4#Docker主机(Host):
    安装了Docker程序的主机,运行Docker守护进程

5、Docker与虚拟化

Docker以及其他容器技术,都属于操作系统虚拟化范畴,操作系统细腻化最大的特点就是不需要额的supervisor支持
Docker虚拟化方式之所以有众多优势,跟操作系统虚拟化技术自身的设计和实现分不开
在这里插入图片描述

6、Docker基础架构

Docker 使用客户端-服务器架构。Docker 客户端与 Docker 守护进程通信,后者负责构建、运行和分发Docker 容器等繁重的工作。Docker 客户端和守护进程可以运行在同一个系统上,或者您可以将一个 Docker 客户端连接到一个远程 Docker 守护进程。Docker 客户端和守护进程通过 UNIX 套接字或网络接口使用 REST API 进行通信
在这里插入图片描述

7、Docker版本

Docker 从v17.03开始划分为CE 和EE:CE 即社区版,EE 即企业版,强调安全,付费使用

Docker在1.13 版本之后,从2017年的3月1日开始,版本命名规则变为如下:
在这里插入图片描述

8、Docker 引擎

Docker 引擎是一个 客户端-服务器 应用程序,具有以下主要组件:

一个服务器,它是一种称为守护进程(dockerd 命令)的长时间运行程序
一个 REST API,它指定程序可以用来与守护进程对话并指示它做什么的接口
一个命令行界面(CLI)客户端(docker命令)

在这里插入图片描述

CLI 使用Docker REST API通过脚本或直接CLI命令控制Docker守护进程或与之交互。许多其他Docker应用程序使用底层API和CLI。这个守护进程创建和管理 Docker 对象,如镜像、容器、网络和卷(images, containers, networks, and volumes)

9、Docker使用步骤

1》安装Docker
2》从Docker仓库中下载软件对应的镜像
3》运行这个镜像,此时会生成一个Docker容器
4》对容器的启动/停止

10、镜像

1》base 镜像简单来说就是不依赖其他任何镜像,完全从0开始建起,其他镜像都是建立在他的之上,可以比喻为大楼的地基,docker镜像的鼻祖
2》base 镜像的通常都是各种 Linux 发行版的 Docker 镜像,比如 Ubuntu, Debian, CentOS 等

【镜像简述】

#base 镜像有两层含义:
(1)不依赖其他镜像,从 scratch 构建
(2)其他镜像可以之为基础进行扩展

Linux启动到运行需要两个FS,bootfs + rootfs
在这里插入图片描述
1》rootfs
内核空间是 kernel,Linux 刚启动时会加载 bootfs 文件系统,之后 bootfs 会被卸载掉。用户空间的文件系统是 rootfs,包含我们熟悉的 /dev, /proc, /bin 等目录
2》 对于基础的base 镜像来说,底层直接用 Host 的 kernel,自己只需要提供 rootfs 就行了

【镜像分层】

分层构建过程:
新镜像是从 base 镜像一层一层叠加生成的,每安装一个软件,就在现有镜像的基础上增加一层
在这里插入图片描述

【容器层】

一个新的可写层被加载到镜像的顶部,这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”

#容器层的概述:
  典型的Linux在启动后,首先将 rootfs 置为 readonly, 进行一系列检查, 然后将其切换为 “readwrite” 供用户使用。
  在docker中,起初也是将 rootfs 以readonly方式加载并检查,然而接下来利用 union mount 的将一个 readwrite 文件系统挂载在 readonly 的rootfs之上,
  并且允许再次将下层的 file system设定为readonly 并且向上叠加, 这样一组readonly和一个writeable的结构构成一个container的运行目录, 每一个被称作一个Layer

在这里插入图片描述
1》所有对容器的改动,无论添加、删除、还是修改文件都只会发生在容器层中,只有容器层是可写的,容器层下面的所有镜像层都是只读的
2》只有当需要修改时才复制一份数据,这种特性被称作 Copy-on-Write。可见,容器层保存的是镜像变化的部分,不会对镜像本身进行任何修改

#常见的对容器操作的四种方式:
添加文件:在容器中创建文件时,新文件被添加到容器层中。
读取文件:在容器中读取某个文件时,Docker 会从上往下依次在各镜像层中查找此文件。一旦找到,立即将其复制到容器层,然后打开并读入内存。
修改文件:在容器中修改已存在的文件时,Docker 会从上往下依次在各镜像层中查找此文件。一旦找到,立即将其复制到容器层,然后修改之。
删除文件:在容器中删除文件时,Docker 也是从上往下依次在镜像层中查找此文件。找到后,会在容器层中记录下此删除操作。

二、Docker安装及使用

Docker引擎是使用Docker容器的核心组件,可以在主流的操作系统和云平台上使用,包括Linux操作系统、MacOSS和Windows系统上
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化

Docker安装包获取:【Docker官网】

在这里插入图片描述

1、CentOS系统上安装Docker

Docker目前支持CentOS 7及以后版本,系统的要求跟Ubuntu情况类似,64位操作系统,内核至少是3.10以上

1################################# 查看系统内核 #########################################
[root@docker ~]# uname -r
3.10.0-693.el7.x86_64



2################################# 更改系统yum源 #########################################
#备份原来YUN源
[root@docker ~]# cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak

#更换YUM源
[root@docker ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo


#刷新yum源缓存
[root@docker ~]#yum makecache




3################################# 系统更新 #########################################
[root@docker ~]# yum update -y --exclud=kernel*
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
.......
...

4################################# 安装必要的一些系统工具 #########################################
[root@docker ~]# sudo yum install -y yum-utils device-mapper-persistent-data lvm2
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
.........
.....



5) ################################# 添加软件yum源 阿里云镜像 #########################################
[root@docker ~]# sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
已加载插件:fastestmirror
adding repo from: https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
grabbing file https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
repo saved to /etc/yum.repos.d/docker-ce.repo



6) ################################# 清除原安装Docker残余 #########################################
[root@docker ~]# sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine



7) ################################# 更新并安装Docker-CE #########################################
[root@docker ~]# sudo yum makecache fast           #快速生成缓存
[root@docker ~]# sudo yum -y install docker-ce
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
......
...


8) ################################# 启动并加入开机自启动 #########################################
ps : 启动前(停止防火墙、关闭selinux)
[root@docker ~]# systemctl stop firewalld && systemctl disable firewalld && setenforce 0

[root@docker ~]#  systemctl enable --now docker    
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.



9) ################################# 检查启动 #########################################
[root@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.5.1-docker)
  scan: Docker Scan (Docker Inc., v0.8.0)

Server:
 Containers: 1
  Running: 0
  Paused: 0
  Stopped: 1
 Images: 1
 Server Version: 20.10.7
 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: 7eba5930496d9bbe375fdf71603e610ad737d2b2
 runc version: v1.0.0-0-g84113ee
 init version: de40ad0
 Security Options:
  seccomp
   Profile: default
 Kernel Version: 3.10.0-693.el7.x86_64
 Operating System: CentOS Linux 7 (Core)
 OSType: linux
 Architecture: x86_64
 CPUs: 2
 Total Memory: 1.459GiB
 Name: docker
 ID: FVDQ:PX6U:XSPC:RWAM:3AJM:HWP3:7YY3:5O7C:I4JX:LP56:OTJV:ETUL
 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://hahexyip.mirror.aliyuncs.com/
 Live Restore Enabled: false

WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled



9) ################################# 配置镜像加速器 #########################################
#阿里云镜像加速器
[root@docker ~]# sudo mkdir -p /etc/docker
[root@docker ~]# sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://hahexyip.mirror.aliyuncs.com"]
}
EOF
[root@docker ~]# sudo systemctl daemon-reload
[root@docker ~]# sudo systemctl restart docker













------------------------------------------------------------------------------------------------------

ps : 注意:
官方软件源默认启用了最新的软件,您可以通过编辑软件源的方式获取各个版本的软件包。
例如官方并没有将测试版本的软件源置为可用,您可以通过以下方式开启。
同理可以开启各种测试版本等


1#vim /etc/yum.repos.d/docker-ce.repo[docker-ce-test]下方的enabled=0修改为enabled=1

2#安装指定版本的Docker-CE:
 1) 查找Docker-CE的版本:
     yum list docker-ce.x86_64 --showduplicates | sort -r
     Loading mirror speeds from cached hostfile
     Loaded plugins: branch, fastestmirror, langpacks
     docker-ce.x86_64            17.03.1.ce-1.el7.centos            docker-ce-stable
     docker-ce.x86_64            17.03.1.ce-1.el7.centos            @docker-ce-stable
     docker-ce.x86_64            17.03.0.ce-1.el7.centos            docker-ce-stable
     Available Packages
  
  2)安装指定版本的Docker-CE: (VERSION例如上面的17.03.0.ce.1-1.el7.centos)
     sudo yum -y install docker-ce-[VERSION]
     sudo yum -y install  docker-ce.x86_64-17.03.1.ce 

2、Ubuntu 系统上安装Docker

Ubuntu 14.04/16.04(使用 apt-get 进行安装)
Ubuntu操作系统对Docker的支持十分成熟,可以支持包括x86_64、armhf等系统架构,只要是64位即可。
Docker目前支持最低Ubuntu版本为14.04LTS,但实际上从稳定性上考虑,推荐使用16.04LTS 或18.04LTS版本,并且系统内核越新越好,以支持Docker最新的特性

#基本安装方式同上:

1# 安装必要的一些系统工具
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common



2#安装GPG证书
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -



3# 写入软件yum源信息
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"




4# 更新并安装Docker-CE
sudo apt-get -y update
sudo apt-get -y install docker-ce



5#检查启动
sudo docker version
Client: Docker Engine - Community
 Version:           19.03.13
 API version:       1.40
 Go version:        go1.13.15
 Git commit:        4484c46d9d
 Built:             Wed Sep 16 17:02:36 2020
 OS/Arch:           linux/amd64
 Experimental:      false



-------------------------------------------------------------------------------------------------------------------------------
# 安装指定版本的Docker-CE:
1#查找Docker-CE的版本:
# apt-cache madison docker-ce
docker-ce | 17.03.1~ce-0~ubuntu-xenial | https://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
docker-ce | 17.03.0~ce-0~ubuntu-xenial | https://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages



2# 安装指定版本的Docker-CE: (VERSION例如上面的17.03.1~ce-0~ubuntu-xenial)
sudo apt-get -y install docker-ce=[VERSION]

三、Docker基础命令使用

在这里插入图片描述

1、docker基本操作

#基础命令:
Management Commands:
  app*        Docker App (Docker Inc., v0.9.1-beta3)
  builder     Manage builds
  buildx*     Build with BuildKit (Docker Inc., v0.5.1-docker)
  config      Manage Docker configs
  container   Manage containers
  context     Manage contexts
  image       Manage images
  manifest    Manage Docker image manifests and manifest lists
  network     Manage networks
  node        Manage Swarm nodes
  plugin      Manage plugins
  scan*       Docker Scan (Docker Inc., v0.8.0)
  secret      Manage Docker secrets
  service     Manage services
  stack       Manage Docker stacks
  swarm       Manage Swarm
  system      Manage Docker
  trust       Manage trust on Docker images
  volume      Manage volumes

Commands:
  attach      Attach local standard input, output, and error streams to a running container
  build       Build an image from a Dockerfile
  commit      Create a new image from a container's changes
  cp          Copy files/folders between a container and the local filesystem
  create      Create a new container
  diff        Inspect changes to files or directories on a container's filesystem
  events      Get real time events from the server
  exec        Run a command in a running container
  export      Export a container's filesystem as a tar archive
  history     Show the history of an image
  images      List images
  import      Import the contents from a tarball to create a filesystem image
  info        Display system-wide information
  inspect     Return low-level information on Docker objects
  kill        Kill one or more running containers
  load        Load an image from a tar archive or STDIN
  login       Log in to a Docker registry
  logout      Log out from a Docker registry
  logs        Fetch the logs of a container
  pause       Pause all processes within one or more containers
  port        List port mappings or a specific mapping for the container
  ps          List containers
  pull        Pull an image or a repository from a registry
  push        Push an image or a repository to a registry
  rename      Rename a container
  restart     Restart one or more containers
  rm          Remove one or more containers
  rmi         Remove one or more images
  run         Run a command in a new container
  save        Save one or more images to a tar archive (streamed to STDOUT by default)
  search      Search the Docker Hub for images
  start       Start one or more stopped containers
  stats       Display a live stream of container(s) resource usage statistics
  stop        Stop one or more running containers
  tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
  top         Display the running processes of a container
  unpause     Unpause all processes within one or more containers
  update      Update configuration of one or more containers
  version     Show the Docker version information
  wait        Block until one or more containers stop, then print their exit codes

2、镜像的使用

镜像是运行容器的模板,官方Docker Hub 仓库已经提供了许多镜像共开发者使用

【搜索镜像】(search)

搜索镜像默认在官方镜像仓库中搜索

# 搜索镜像
格式:docker search [镜像ID|名称]



#示列:
[root@docker /]# docker search nginx
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
nginx                             Official build of Nginx.                        15210     [OK]       
jwilder/nginx-proxy               Automated Nginx reverse proxy for docker con…   2051                 [OK]
richarvey/nginx-php-fpm           Container running Nginx + PHP-FPM capable of…   816                  [OK]
jc21/nginx-proxy-manager          Docker container for managing Nginx proxy ho…   223                  
linuxserver/nginx                 An Nginx container, brought to you by LinuxS…   149                  
tiangolo/nginx-rtmp               Docker image with Nginx using the nginx-rtmp…   136                  [OK]
jlesage/nginx-proxy-manager       Docker container for Nginx Proxy Manager        125                  [OK]
alfg/nginx-rtmp                   NGINX, nginx-rtmp-module and FFmpeg from sou…   102                  [OK]
jasonrivers/nginx-rtmp            Docker images to host RTMP streams using NGI…   92                   [OK]
nginxdemos/hello                  NGINX webserver that serves a simple page co…   70                   [OK]
privatebin/nginx-fpm-alpine       PrivateBin running on an Nginx, php-fpm & Al…   56                   [OK]
nginx/nginx-ingress               NGINX and  NGINX Plus Ingress Controllers fo…   55                   
nginxinc/nginx-unprivileged       Unprivileged NGINX Dockerfiles                  45                   
staticfloat/nginx-certbot         Opinionated setup for automatic TLS certs lo…   24                   [OK]
schmunk42/nginx-redirect          A very simple container to redirect HTTP tra…   19                   [OK]
nginx/nginx-prometheus-exporter   NGINX Prometheus Exporter for NGINX and NGIN…   19                   
centos/nginx-112-centos7          Platform for running nginx 1.12 or building …   15                   
centos/nginx-18-centos7           Platform for running nginx 1.8 or building n…   13                   
raulr/nginx-wordpress             Nginx front-end for the official wordpress:f…   13                   [OK]
bitwarden/nginx                   The Bitwarden nginx web server acting as a r…   11                   
flashspys/nginx-static            Super Lightweight Nginx Image                   10                   [OK]
mailu/nginx                       Mailu nginx frontend                            9                    [OK]
sophos/nginx-vts-exporter         Simple server that scrapes Nginx vts stats a…   7                    [OK]
ansibleplaybookbundle/nginx-apb   An APB to deploy NGINX                          2                    [OK]
wodby/nginx                       Generic nginx                                   1                    [OK]



ps :NAME : 镜像名称
     DESCRIPTION : 镜像描述
	 STARS : 收藏个数
	 OFFICIAL : 是否是官方构建镜像
	 AUTOMATED:是否是自构建镜像


#参数:
	--limit :  查询出几条
	-f :       指定字段
	--no-trunc :显示所有的简介

【拉镜像】(下载)

#获取镜像的格式:
docker pull [仓库的URL]/[名称空间]/[仓库的名称]:[版本号]

#示列一
#下载镜像:(nginx)
[root@docker ~]#docker pull nginx:1.17
1.17: Pulling from library/nginx
afb6ec6fdc1c: Pull complete
b90c53a0b692: Pull complete
11fa52a0fdc0: Pull complete
Digest: sha256:6fff55753e3b34e36e24e37039ee9eae1fe38a6420d8ae16ef37c92d1eb26699
Status: Downloaded newer image for nginx:1.17
docker.io/library/nginx:1.17

ps :默认的仓库URL:index.docker.io
     默认的命名空间:library
     index.docker.io/library/mysql:5.7




#示列二
[root@Centos7 ~]# docker pull redis
Using default tag: latest
latest: Pulling from library/redis

# 镜像层
a076a628af6f: Already exists 
f40dd07fe7be: Pull complete 
ce21c8a3dbee: Pull complete 
ee99c35818f8: Pull complete 
56b9a72e68ff: Pull complete 
3f703e7f380f: Pull complete 

# 镜像ID号(镜像ID号是全球唯一)
Digest: sha256:0f97c1c9daf5b69b93390ccbe8d3e2971617ec4801fd0882c72bf7cad3a13494

# 镜像下载状态
Status: Downloaded newer image for redis:latest 

# 镜像的全称(镜像的tag)
docker.io/library/redis:latest

【查看镜像】(images)

	格式:docker image ls 和 docker images   #查看当前系统中所有的镜像列表

	示列:
[root@docker ~]# docker images 
REPOSITORY                                           TAG       IMAGE ID       CREATED         SIZE
nginx                                                latest    08b152afcfae   4 days ago      133MB
registry.cn-shanghai.aliyuncs.com/hzl_images/redis   v1        fad0ee7e917a   7 weeks ago     105MB
nginx                                                1.17      9beeba249f3e   14 months ago   127MB
[root@docker ~]# docker image ls      #查看所有镜像
REPOSITORY                                           TAG       IMAGE ID       CREATED         SIZE
nginx                                                latest    08b152afcfae   4 days ago      133MB
registry.cn-shanghai.aliyuncs.com/hzl_images/redis   v1        fad0ee7e917a   7 weeks ago     105MB
nginx                                                1.17      9beeba249f3e   14 months ago   127MB




#参数
-q : 只显示镜像ID
[root@Centos7 ~]# docker images -q
621ceef7494a
f6d0b4767a6c



ps :  镜像来源:来自哪个仓库,默认来自:hub.docker.com
      镜像标签:比喻1.17、1000-teach-2020-10-28-13-40-27
      镜像ID:例如22fdec3d9a6d
      镜像创建时间:例如:3 weeks ago
      镜像大小:127MB

【查看镜像详细信息】(inspect)

# 格式
	docker inspect [镜像名称或镜像ID]


[root@docker ~]# docker inspect 9beeba249f3e
[
    {
        "Id": "sha256:9beeba249f3ee158d3e495a6ac25c5667ae2de8a43ac2a8bfd2bf687a58c06c9",
        "RepoTags": [
            "nginx:1.17"
        ],
        "RepoDigests": [
      ........
      .....


     
# 参数
-f : 格式化输出


[root@docker ~]# docker inspect -f '{{.Id}}' 9beeba249f3e
sha256:9beeba249f3ee158d3e495a6ac25c5667ae2de8a43ac2a8bfd2bf687a58c06c9

[root@docker ~]# docker inspect -f '{{.ContainerConfig.Hostname}}' nginx:latest 
2997e2321de2

【登录镜像仓库】(login)

# 格式
	docker login 
	ps : 默认情况下,docker login登录的是官方仓库,如果登录其他镜像仓库则需要指定镜像仓库的URL连接。
	



# 示列:
[root@docker /]# docker login 
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: hzl888
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded


        
#登录阿里云
[root@docker opt]# docker login --username=一笑奈何20144  registry.cn-shanghai.aliyuncs.com
Password: 
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded




# 参数
--username|-u : 指定用户名
--password|-p : 指定密码




#登录认证
[root@docker opt]# cat ~/.docker/config.json 
{
	"auths": {
		"https://index.docker.io/v1/": {
			"auth": "aHpsODg4Omh6bEAyMDE0NDMyMTM0"
		},
		"registry.cn-shanghai.aliyuncs.com": {
			"auth": "5LiA56yR5aWI5L2VMjAxNDQ6aHpsQDIwMTQ0"
		}
	}
}
[root@docker opt]# 

【镜像打标签】(tag)

# 镜像标签的构成
docker.io/library/redis:latest
docker.io  : 镜像仓库的URL
library    :镜像仓库命名空间
redis	   : 镜像名称
latest	   : 镜像版本号


# 格式
docker tag [镜像ID]  镜像标签

# 打标签
docker login --username=一笑奈何20144 registry.cn-shanghai.aliyuncs.com                 #登录
docker tag [ImageId] registry.cn-shanghai.aliyuncs.com/hzl_images/redis:[镜像版本号]    #镜像打标签
docker push registry.cn-shanghai.aliyuncs.com/hzl_images/redis:[镜像版本号]             #推镜像



[root@docker /]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
redis        latest    621ceef7494a   2 months ago   104MB
nginx        latest    f6d0b4767a6c   2 months ago   133MB

[root@docker /]#  docker tag 621ceef7494a registry.cn-shanghai.aliyuncs.com/hzl_images/redis:v1

[root@docker /]#  docker images
REPOSITORY                                        TAG       IMAGE ID       CREATED        SIZE
redis                                             latest    621ceef7494a   2 months ago   104MB
registry.cn-shanghai.aliyuncs.com/hzl_images/redis   v1        621ceef7494a   2 months ago   104MB
nginx                                             latest    f6d0b4767a6c   2 months ago   133MB

【推镜像】(上传)

# 格式
	docker push [镜像标签]



# 注:要想上传镜像,首先得登录镜像仓库,其次设置对应镜像仓库的tag

[root@docker /]# docker push registry.cn-shanghai.aliyuncs.com/hzl_images/redis:v1
The push refers to repository [registry.cn-shanghai.aliyuncs.com/hzl_images/redis]
3480f9cdd491: Pushed 
a24a292d0184: Pushed 
f927192cc30c: Pushed 
1450b8f0019c: Pushed 
8e14cb7841fa: Pushed 
cb42413394c4: Pushed 
v1: digest: sha256:7ef832c720188ac7898dbd8d1e237b0738e94f94fc7e981cb7b8efe84555e892 size: 1572

【镜像的删除】(rmi)

# 格式
	docker rmi [镜像名称或者镜像ID]
# 实例
[root@docker /]# docker rmi nginx


# 参数
	-f  : 强制删除
[root@docker /]# docker rmi -f nginx
    Untagged: nginx:latest
    Untagged: nginx@sha256:10b8cc432d56da8b61b070f4c7d2543a9ed17c2b23010b43af434fd40e2ca4aa

 # 注:当有容器正在使用镜像时,强制删除镜像,只能删除镜像的所有tag, 不会删除镜像。

【清空镜像】(prune)

# 格式
	docker image prune

# 实例
[root@docker /]# docker image prune 
    WARNING! This will remove all dangling images.
    Are you sure you want to continue? [y/N] y
    Total reclaimed space: 0B



 # 参数
 -a : 删除所有镜像
 

[root@docker /]# docker image prune -a
WARNING! This will remove all images without at least one container associated to them.
Are you sure you want to continue? [y/N] y
Deleted Images:
untagged: redis:latest
untagged: redis@sha256:0f97c1c9daf5b69b93390ccbe8d3e2971617ec4801fd0882c72bf7cad3a13494
untagged: registry.cn-hangzhou.aliyuncs.com/alvinos/redis:v2
untagged: registry.cn-hangzhou.aliyuncs.com/alvinos/redis@sha256:7ef832c720188ac7898dbd8d1e237b0738e94f94fc7e981cb7b8efe84555e892
deleted: sha256:621ceef7494adfcbe0e523593639f6625795cc0dc91a750629367a8c7b3ccebb
deleted: sha256:de66cfbf4712b8ba9ef292e08ef7487be26d9d21b350548e400ae351405d820e
deleted: sha256:79b2381e35429e8fc04d31b3445f069c22d288bf5c4cba7b7c10004ff78ae201
deleted: sha256:1d047d19be363b00139990d4d7f392dabdb0809dbc9d0fbe67c1f15b8caed27a
deleted: sha256:8c41f4e708c37059df28ae1cabc200a6db2fee45bd3a2cadcf70f2765bb68730
deleted: sha256:b51317bef36fe1900be48402c8a41fcd9cdb6b8950c10209f764473cb8323371

Total reclaimed space: 35.04MB

【查看镜像历史】(镜像的构建历史history)

# 格式
	docker history [镜像ID或镜像名称]


# 示列:
[root@docker /]# docker images
REPOSITORY                                           TAG       IMAGE ID       CREATED         SIZE
nginx                                                latest    08b152afcfae   4 days ago      133MB
registry.cn-shanghai.aliyuncs.com/hzl_images/redis   v1        fad0ee7e917a   7 weeks ago     105MB
nginx                                                1.17      9beeba249f3e   14 months ago   127MB

[root@docker /]# docker history nginx:latest       #查看镜像构建
IMAGE          CREATED      CREATED BY                                      SIZE      COMMENT
08b152afcfae   4 days ago   /bin/sh -c #(nop)  CMD ["nginx" "-g" "daemon…   0B        
<missing>      4 days ago   /bin/sh -c #(nop)  STOPSIGNAL SIGQUIT           0B        
<missing>      4 days ago   /bin/sh -c #(nop)  EXPOSE 80                    0B        
<missing>      4 days ago   /bin/sh -c #(nop)  ENTRYPOINT ["/docker-entr…   0B        
<missing>      4 days ago   /bin/sh -c #(nop) COPY file:09a214a3e07c919a…   4.61kB    
<missing>      4 days ago   /bin/sh -c #(nop) COPY file:0fd5fca330dcd6a7…   1.04kB    
<missing>      4 days ago   /bin/sh -c #(nop) COPY file:0b866ff3fc1ef5b0…   1.96kB    
<missing>      4 days ago   /bin/sh -c #(nop) COPY file:65504f71f5855ca0…   1.2kB     
<missing>      4 days ago   /bin/sh -c set -x     && addgroup --system -…   63.9MB    
<missing>      4 days ago   /bin/sh -c #(nop)  ENV PKG_RELEASE=1~buster     0B        
<missing>      4 days ago   /bin/sh -c #(nop)  ENV NJS_VERSION=0.6.1        0B        
<missing>      4 days ago   /bin/sh -c #(nop)  ENV NGINX_VERSION=1.21.1     0B        
<missing>      4 days ago   /bin/sh -c #(nop)  LABEL maintainer=NGINX Do…   0B        
<missing>      4 days ago   /bin/sh -c #(nop)  CMD ["bash"]                 0B        
<missing>      4 days ago   /bin/sh -c #(nop) ADD file:45f5dfa135c848a34…   69.3MB     

【查看运行的容器】(ps)

# 格式
	docker ps  [镜像ID或镜像名称]
#参数:
-a       #查看所有的容器





#示列:
[root@docker /]# docker ps      #只查看当前运行的容器
CONTAINER ID   IMAGE          COMMAND                  CREATED       STATUS         PORTS     NAMES
63bf4d7c79b7   08b152afcfae   "/docker-entrypoint.…"   5 hours ago   Up 7 seconds   80/tcp    nginx



[root@docker /]# docker ps -a   #查看所有的容器
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS                    PORTS     NAMES
9a01dc8e9548   nginx:latest   "/docker-entrypoint.…"   24 seconds ago   Exited (0) 1 second ago             nginx01
63bf4d7c79b7   08b152afcfae   "/docker-entrypoint.…"   5 hours ago      Up 3 minutes              80/tcp    nginx



#容器名称注释:
        CONTAINER ID    :容器ID
        IMAGE       	:镜像名称
        COMMAND         :容器启动时执行的命令 
        CREATED         :容器的创建时间
        STATUS          :容器的状态(up : 正在运行, Exit:退出(停止)状态  Created : 以创建状态)
        PORTS           :容器向外暴露的端口
        NAMES			:容器的名称

3、镜像保存

1》直接将容器保存为镜像
2》将容器导出为镜像
3》将镜像导出为镜像
请添加图片描述

【直接将容器保存为镜像】(commit)

保存镜像格式: 
docker commit  参数 [名称]  [镜像ID|名称]
	
#示列:
[root@docker /]# docker ps -a       #查看所有的容器
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS     NAMES
9a01dc8e9548   nginx:latest   "/docker-entrypoint.…"   2 seconds ago   Up 1 second    80/tcp    nginx01
63bf4d7c79b7   08b152afcfae   "/docker-entrypoint.…"   5 hours ago     Up 3 minutes   80/tcp    nginx



[root@docker /]# docker commit -a 'Auther: Hzl' -m 'Nginx Containerd' -p  9a01dc8e9548  nginx:v2
sha256:16678050f4136a39b8b91686cb1275b270295cf562dbaae21810ceb8c13572e5



[root@docker /]# docker images
REPOSITORY                                           TAG       IMAGE ID       CREATED          SIZE
nginx                                                v2        16678050f413   17 seconds ago   133MB

【容器导出为镜像】(exprot、improt)

#格式:
     docker export [容器ID] [保存的压缩包]           #导出保存到本地
	 docker import  [保存的压缩包] [容器名称:版本]     #导入到镜像    


#示列:
#方式一:
[root@docker ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS                      PORTS     NAMES
63bf4d7c79b7   08b152afcfae   "/docker-entrypoint.…"   5 hours ago      Up 20 minutes               80/tcp    nginx
[root@docker ~]# docker export -o nginx.tar 63bf4d7c79b7    #导出容器
[root@docker ~]# ll
总用量 132488
-rw-------  1 root root 135662080 727 06:26 nginx.tar   



[root@docker ~]# docker import nginx.tar nginx:v3            #导入容器为镜像
sha256:2c86be956c2560afcbe6bddd7a46be4fd95939823cf78589d11f53d8debd61e8
[root@docker ~]# docker images
REPOSITORY                                           TAG       IMAGE ID       CREATED          SIZE
nginx                                                v3        2c86be956c25   4 seconds ago    132MB





#方式二:
[[root@docker ~]# docker export 63bf4d7c79b7  > nginx01.tar      #
[root@docker ~]# ll |grep nginx01.tar 
-rw-r--r--  1 root root 135662080 727 06:51 nginx01.tar



【镜像导出为镜像】(save、load)

格式:
      docker save   [参数] [保存的压缩包] [镜像ID]      #导出镜像
	  docker load < [保存的压缩包]                     #导入镜像

#参数:
-o     #指定压缩包名称	
	

#示列:
方式一:
[root@docker ~]# docker save -o tar_save.tar 16678050f413     #导出镜像
[root@docker ~]# ll 
总用量 266720
-rw-------  1 root root 137453056 727 06:35 tar_save.tar


[root@docker ~]# docker load < tar_save.tar                   #导入镜像
d5ad20a024f3: Loading layer [==================================================>]  9.216kB/9.216kB
Loaded image ID:   sha256:16678050f4136a39b8b91686cb1275b270295cf562dbaae21810ceb8c13572e5



#方式二:
[root@docker ~]# docker save c60d96bd2b77 > mysql.tar 
[root@docker ~]# ll |grep mysql.tar 
-rw-r--r--  1 root root 519245312 727 06:53 mysql.tar





# 注:save/load保存镜像无法自定义镜像名称,save保存镜像时如果使用ID保存则load导入镜像无名称,使用名称导入时才有名称

#示列:
[root@docker ~]#docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
busybox      latest    b97242f89c8a   2 months ago     1.23MB
[root@docker ~]# docker save busybox:latest > busybox.tar
[root@docker ~]# ll
total 150120
-rw-r--r--. 1 root root   1459200 Mar 18 17:43 busybox.tar
[root@docker ~]# docker rmi b97242f89c8a
Untagged: busybox:latest
Untagged: busybox@sha256:c5439d7db88ab5423999530349d327b04279ad3161d7596d2126dfb5b02bfd1f
Deleted: sha256:b97242f89c8a29d13aea12843a08441a4bbfc33528f55b60366c1d8f6923d0d4
Deleted: sha256:0064d0478d0060343cb2888ff3e91e718f0bffe9994162e8a4b310adb2a5ff74
[root@docker ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
[root@docker ~]#docker load < busybox.tar 
0064d0478d00: Loading layer [==================================================>]   1.45MB/1.45MB
Loaded image: busybox:latest
[root@docker ~]#docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
busybox      latest    b97242f89c8a   2 months ago     1.23MB

【三种保存镜像的区别】

1》docker export 保存的镜像的体积小于docker save (save保存更完全,export保存会丢掉一些不必要的数据)
2》docker save是完全保存,而docker export是仅仅保存镜像
3》docker load不能够自定义镜像名称,docker impprt 可以
4》docker import未保存镜像默认的启动命令,docker load保存了
5》docker save一般情况下,使用的场景是项目迁移,docker export一般情况下是作为基础镜像
6》docker save可以同时保存多个镜像而dockerexport则不行

四、容器运行

在这里插入图片描述

1、运行容器 (run)

#格式:
docker run [OPTIONS] IMAGE [COMMAND] [ARG…]

#常用OPTIONS(选项):
-i:   --interactive  交互式启动
-t:   --tty,     分配终端
-v:   --volume   挂在数据卷
-d:   --detach   后台运行
-e              设置容器内环境变量
-h              设置容器主机名称
-m :            设置容器内存限制(默认:-1即为不做任何限制)

--link          设置容器之间单项连接,连接上另一个容器,与另外一个容器网络互通
--name:       设置容器的容器名字
--network:    指定网络
--rm:         容器停止自动删除容器


-P:            自动暴露所有容器内端口,宿主随机分配端口
-p:            指定端口映射,将容器内服务的端口映射到宿主机的指定端口,可以使用多个-p
       #端口映射三种方式:
    <container port>#随机分配宿主机的一个端口作为映射端口
    <hostport>:<container port>            #指明主机的端口映射为容器端口
    <hostip>:<hostport>:<container port>   #指定主机ip和端口







#示列:
ps :运行一个名字为nginx-container的容器,使用镜像nginx,并将宿主机的8080映射到容器内部80端口,然后进入交互模式


#运行容器
[root@docker /]# docker run -d --link php:php -v /tmp/wordpress/:/usr/share/nginx/html -p 80:80 --name nginx nginx:latest 
4d95b43f5f2e54449cd50e3b7dd0e8513252eb7582d04af63342ce119501200d
[root@docker /]# docker ps
CONTAINER ID   IMAGE                                                     COMMAND                  CREATED         STATUS         PORTS                               NAMES
4d95b43f5f2e   nginx:latest                                              "/docker-entrypoint.…"   7 seconds ago   Up 6 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp   nginx
d74a0e2efaa8   registry.cn-shanghai.aliyuncs.com/hzl_images/php7.1:7.1   "php-fpm -F"             4 hours ago     Up 2 hours     9000/tcp                            php
671a0db5cfcb   mysql:latest                                              "docker-entrypoint.s…"   4 hours ago     Up 2 hours     3306/tcp, 33060/tcp                 mysql
[root@docker /]# 



#使用docker运行nginx并进入容器内部
[root@docker ~]# docker run -it --name nginx-container -p 8080:80  nginx /bin/bash
root@3e760ebb5400:/# ls         #进入容器
bin  boot  dev	docker-entrypoint.d  docker-entrypoint.sh  etc	home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var



[root@docker ~]# docker run -d --name nginx -p 80:80 nginx 
375167f629a1c507c2091e10d830676816eaa222060cc5a44724f0f340dffcd7
[root@docker ~]# docker  ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                               NAMES
375167f629a1   nginx     "/docker-entrypoint.…"   12 seconds ago   Up 12 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp   nginx




#使用docker运行数据库
[root@docker ~]# docker run -e MYSQL_ROOT_PASSWORD=1234 -d mysql
c513d4af65a6e3ba4e25ef70df5a89eedbe51ef7a24eb3fb9e0bc6159a49af24
[root@docker ~]# docker ps 
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                               NAMES
c513d4af65a6   mysql     "docker-entrypoint.s…"   5 seconds ago   Up 4 seconds   3306/tcp, 33060/tcp                 recursing_feistel
375167f629a1   nginx     "/docker-entrypoint.…"   4 minutes ago   Up 4 minutes   0.0.0.0:80->80/tcp, :::80->80/tcp   nginx


2、创建容器(create)

#格式:
docker  create [镜像ID|名称]  指定解释器



#实列:
[root@docker ~]# docker create  mysql:latest --name mysql bash
d43d12e2602f9373a759d17fc20edc2a5df542ff798dcad72488490b19f44279
[root@docker ~]# docker  ps -a     
CONTAINER ID   IMAGE          COMMAND                  CREATED              STATUS          PORTS     NAMES
d43d12e2602f   mysql:latest   "docker-entrypoint.s…"   About a minute ago   Created                   happy_joliot

### 3、查看容器(ps)
````bash
docker ps [OPTIONS]
#常用选项:
-a:    --all ,查看所有容器,包括退出和其他状态的
-n:   --last int,显示最后n个创建的容器
-l:    --latest ,显示最近的容器



#示例 :
[root@docker ~]# docker ps -n 2
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
4d51a1cdf4b4        busybox             "/bin/sh"                11 seconds ago      Up 9 seconds                               busybox
383f31ff8f01        nginx               "nginx -g 'daemon of…"   3 minutes ago       Up 3 minutes        0.0.0.0:8080->80/tcp   nginx-container


[root@docker ~]#  docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
4d51a1cdf4b4        busybox             "/bin/sh"           41 seconds ago      Up 39 seconds                           busybox

4、启动已停止的容器(start、restart)

#格式:
docker start [OPTIONS] CONTAINER [CONTAINER…]

#常用选项:
-a:    --attach 附加终端
-i:    --interactive 交互式 





#示列:
[root@docker ~]# docker start -ia nginx
/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: IPv6 listen already enabled
/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/07/26 23:24:34 [notice] 1#1: using the "epoll" event method
2021/07/26 23:24:34 [notice] 1#1: nginx/1.21.1
2021/07/26 23:24:34 [notice] 1#1: built by gcc 8.3.0 (Debian 8.3.0-6) 
2021/07/26 23:24:34 [notice] 1#1: OS: Linux 3.10.0-693.el7.x86_64
2021/07/26 23:24:34 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2021/07/26 23:24:34 [notice] 1#1: start worker processes
2021/07/26 23:24:34 [notice] 1#1: start worker process 24
2021/07/26 23:24:34 [notice] 1#1: start worker process 25
........
.....

5、删除容器(rm)

#格式:
docker rm [OPTIONS] CONTAINER [CONTAINER…] 或者docker container rm
ps :如果删除的容器正在运行则需要指定-f进行强制删除

#常用选项:
-f: --force 强制删除



#示例: 
ps : 删除一个容器
[root@docker ~]# docker rm nginx-container
nginx-container


Ps : 删除所有容器
#方式一:
[root@docker ~]# docker rm -f `docker ps -a -q`
9a01dc8e9548
63bf4d7c79b7
[root@docker ~]# docker ps -a        #查看没有容器了
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES


#方式二:
[root@docker ~]# docker ps -a |awk -F ' ' '{print $1}' |xargs docker rm -f    #
Error: No such container: CONTAINER
e05f4cdba0c5
[root@docker ~]# docker ps -a     
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

6、暂停某个容器(pause)

#格式
docker pause CONTAINER [CONTAINER…]



#示例:
[root@app51 ~]# docker pause nginx-container
nginx-container

7、恢复暂停的容器(unpause)

#格式
docker unpause CONTAINER [CONTAINER…]


#示列:
[root@app51 ~]# docker pause nginx-container
nginx-container

8、查看容器日志(logs)

#格式:
docker logs [OPTIONS] CONTAINER

#常用选项:
-t:     --timestamps :显示日志时间
-f :                   实时打印日志



#示列:
[root@docker opt]# docker logs nginx 
/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/07/27 08:44:42 [notice] 1#1: using the "epoll" event method
2021/07/27 08:44:42 [notice] 1#1: nginx/1.21.1
2021/07/27 08:44:42 [notice] 1#1: built by gcc 8.3.0 (Debian 8.3.0-6) 
2021/07/27 08:44:42 [notice] 1#1: OS: Linux 3.10.0-693.el7.x86_64
2021/07/27 08:44:42 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2021/07/27 08:44:42 [notice] 1#1: start worker processes
2021/07/27 08:44:42 [notice] 1#1: start worker process 31
2021/07/27 08:44:42 [notice] 1#1: start worker process 32
 
[root@docker opt]# docker logs nginx -f       #实时打印容器日志
/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/07/27 08:44:42 [notice] 1#1: using the "epoll" event method
2021/07/27 08:44:42 [notice] 1#1: nginx/1.21.1
2021/07/27 08:44:42 [notice] 1#1: built by gcc 8.3.0 (Debian 8.3.0-6) 
2021/07/27 08:44:42 [notice] 1#1: OS: Linux 3.10.0-693.el7.x86_64
2021/07/27 08:44:42 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2021/07/27 08:44:42 [notice] 1#1: start worker processes
2021/07/27 08:44:42 [notice] 1#1: start worker process 31
2021/07/27 08:44:42 [notice] 1#1: start worker process 32

9、进入容器(exec、attach)

#格式:
docker exec [OPTIONS] CONTAINER COMMAND [ARG…]



#常用选项:
  -d:--detach ,后台运行命令
  -e, --env list             设置env
  -i, --interactive          启用交互式
  -t, --tty                  启用终端
  -u, --user string          指定用户 (格式: <name|uid>[:<group|gid>])
  -w, --workdir string       指定工作目录 




1#docker exec : 在宿主主机上向容器内部执行一个命令,但是docker exec可以达到进入容器的效果
#格式:	
docker exec -it [容器的名称|ID] 进入容器执行的命令

	
2#attach
#格式:	
docker attach : 通过进程管道连接上容器内部PID为1的进程
	
3#nsenter
#格式:
nsenter --target $( docker inspect -f {{.State.Pid}} hardcore_black ) --mount --uts --ipc --net --pid
		
4#ssh





#示例:
[root@docker ~]# docker exec -it -u nginx nginx-container /bin/sh
$ id
uid=101(nginx) gid=101(nginx) groups=101(nginx)
$





# 常用的进入容器的方式:exec和nsenter
1》Exec是docker自带的命令,Nsenter是Linux提供的命令
2》Exec相当于在容器内执行一个命令,而Nsenter是仅仅进入容器之中而已


10、复制宿主主机与容器(cp)

#格式:
docker cp 宿主主机路径  [容器ID|名称]:[容器内部地址]    将宿主主机文件复制到容器内部
docker cp [容器ID|名称]:[容器内部地址] 宿主主机路径		将容器内部文件复制到宿主主机


#示列:
[root@docker opt]#   docker cp /opt/nginx.conf  nginx:/etc/nginx/nginx.conf 
[root@docker opt]# docker cp /opt/default.conf  nginx:/etc/nginx/conf.d/default.conf

11、查看容器进程(top)

#格式:
docker top  [容器名称|ID]



#示列:
[root@docker opt]# docker top  nginx
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                49639               49620               0                   16:44               ?                   00:00:00            nginx: master process nginx -g daemon off;
101                 49694               49639               0                   16:44               ?                   00:00:00            nginx: worker process
101                 49695               49639               0                   16:44               ?                   00:00:00            nginx: worker process

12、修改容器名称(rename)

#格式:
docker rename [容器名称|ID]  [修改后的容器名称]


#示列:
[root@docker opt]# docker rename nginx nginx01
[root@docker opt]# docker ps
CONTAINER ID   IMAGE                                                     COMMAND                  CREATED          STATUS          PORTS                               NAMES
4d95b43f5f2e   nginx:latest                                              "/docker-entrypoint.…"   17 minutes ago   Up 17 minutes   0.0.0.0:80->80/tcp, :::80->80/tcp   nginx01

13、查看容器网络(network ls)

#格式:
docker network ls



#示列:
[root@docker opt]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
b5e4fae2126d   bridge    bridge    local
c0e4bda04846   host      host      local
3620d3b3be5b   none      null      local

14、运行信息查看(docker info)

[root@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.5.1-docker)
  scan: Docker Scan (Docker Inc., v0.8.0)

Server:
 Containers: 1
  Running: 1
  Paused: 0
  Stopped: 0
 Images: 6
 Server Version: 20.10.7
 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: runc io.containerd.runc.v2 io.containerd.runtime.v1.linux
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 7eba5930496d9bbe375fdf71603e610ad737d2b2
 runc version: v1.0.0-0-g84113ee
 init version: de40ad0
 Security Options:
  seccomp
   Profile: default
 Kernel Version: 3.10.0-693.el7.x86_64
 Operating System: CentOS Linux 7 (Core)
 OSType: linux
 Architecture: x86_64
 CPUs: 2
 Total Memory: 1.459GiB
 Name: docker
 ID: FVDQ:PX6U:XSPC:RWAM:3AJM:HWP3:7YY3:5O7C:I4JX:LP56:OTJV:ETUL
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Username: hzl888
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Registry Mirrors:
  https://hahexyip.mirror.aliyuncs.com/
 Live Restore Enabled: false

WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled
[root@docker ~]# 

15、版本信息查看 (docker version)

[root@docker ~]# docker version 
Client: Docker Engine - Community
 Version:           20.10.7
 API version:       1.41
 Go version:        go1.13.15
 Git commit:        f0df350
 Built:             Wed Jun  2 11:58:10 2021
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.7
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.13.15
  Git commit:       b0f5bc3
  Built:            Wed Jun  2 11:56:35 2021
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.4.8
  GitCommit:        7eba5930496d9bbe375fdf71603e610ad737d2b2
 runc:
  Version:          1.0.0
  GitCommit:        v1.0.0-0-g84113ee
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
[root@docker ~]# 

五、使用容器搭建wordpress

【docker搭建lnmp】

posted @ 2021-07-26 19:57  ଲ一笑奈&何  阅读(250)  评论(0编辑  收藏  举报