Docker学习笔记(一):基本概念、Docker安装、阿里云加速、镜像命令、容器命令、其他常用命令

Docker概述

1、简介

docker是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源。

docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的linux服务器,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口,并且容器开销极其低。

docker官网:https://www.docker.com/

docker文档:https://docs.docker.com/

docker hub:https://hub.docker.com/

2、Docker VS 虚拟机

虚拟机:虚拟机运行的是一个完成的操作系统,通过虚拟机管理程序对主机资源进行虚拟访问,相比之下需要的资源更多。包含系统内核、lib、app等,相对更加重量级
Docker学习笔记(一):基本概念、Docker安装、阿里云加速、镜像命令、容器命令、其他常用命令_第1张图片
虚拟机的缺点:

  • 资源占用多
  • 冗余步骤多
  • 启动慢

Docker:Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
Docker学习笔记(一):基本概念、Docker安装、阿里云加速、镜像命令、容器命令、其他常用命令_第2张图片
两者的不同:

  • 传统虚拟机会虚拟出一个硬件,运行一个完整的操作系统,然后再这个系统上安装和运行环境
  • Docker内的容器直接运行在宿主机的内核上,容器自己是没有内核的,也没有虚拟硬件
  • 每个容器间是相互隔离的,每个容器都有自己的文件系统,相互隔离

3、Docker基本概念

Docker学习笔记(一):基本概念、Docker安装、阿里云加速、镜像命令、容器命令、其他常用命令_第3张图片

1)镜像(image)

docker镜像就是一个只读模板,比如,一个镜像可以包含一个完整的centos,里面仅安装apache或用户的其他应用,镜像可以用来创建docker容器,另外docker提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下周一个已经做好的镜像来直接使用

2)容器(Container)

docker利用容器来运行应用,容器是从镜像创建的运行实例,它可以被启动,开始、停止、删除、每个容器都是互相隔离的,保证安全的平台,可以把容器看做是要给简易版的linux环境(包括root用户权限、镜像空间、用户空间和网络空间等)和运行再其中的应用程序

3)仓库(repostory)

仓库是集中存储镜像文件的地方,registry是仓库主从服务器,实际上参考注册服务器上存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)

仓库分为两种,公有参考,和私有仓库,最大的公开仓库是docker Hub,存放了数量庞大的镜像供用户下周,国内的阿里云,这里仓库的概念与Git类似,registry可以理解为github这样的托管服务

4、Docker安装

参考文档

下面以CentOS 7做安装说明,其他系统可以再参考文档中找到相关教程

# 1、卸载旧版本
yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

# 2、安装相关工具
yum install -y yum-utils

# 3、设置docker下载地址
yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo #国外镜像不推荐
    
yum-config-manager \
    --add-repo \
    https://mirror.aliyun.com/docker-ce/linux/centos/docker-ce.repo #阿里云镜像 推荐

#4、更新yum软件包索引
yum makecache fast

# 5、安装Docker ce是社区版,ee是企业版
yum install docker-ce docker-ce-cli containerd.io

# 6、启动docker
systemctl start docker

#7、hello world测试
docker run hello-world

出现下面的内容表示安装成功:

Docker学习笔记(一):基本概念、Docker安装、阿里云加速、镜像命令、容器命令、其他常用命令_第4张图片

docker run hello-world的运行流程:

Docker学习笔记(一):基本概念、Docker安装、阿里云加速、镜像命令、容器命令、其他常用命令_第5张图片

5、Docker卸载

#1、卸载依赖
yum remove docker-ce docker-ce-cli containerd.io

#2、删除资源
rm -rf /var/lib/docker

6、阿里云镜像加速

1)、登录阿里云

产品与服务->容器镜像服务->镜像加速器

按照上述步骤打开页面,可以看到加速地址和步骤

Docker学习笔记(一):基本概念、Docker安装、阿里云加速、镜像命令、容器命令、其他常用命令_第6张图片

2)、配置

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://**你自己的路径**.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

Docker基本使用

1、底层原理

Docker是一个C/S架构的系统,Docker的守护进程运行在主机上,可以通过Socket从客户端进行访问,Docker-Server可以接收Docker-Client的指令并执行。

Docker学习笔记(一):基本概念、Docker安装、阿里云加速、镜像命令、容器命令、其他常用命令_第7张图片

2、常用命令

1)帮助命令

docker version # 显示docker的版本信息
docker info    # 显示docker的版本信息
docker 命令 --help # 查看相关命令的说明

docker命令的官方文档:https://docs.docker.com/reference/

2)镜像命令

docker images查看下载的镜像

[root@Eva overlay2]# docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
mysql                latest              8e8c6f8dc9df        8 weeks ago         546MB
tomcat               latest              31a47677561a        8 weeks ago         529MB

#解释
REPOSITORY	镜像的仓库源
TAG			镜像的版本
IMAGE ID 	镜像的id
CREATED		精选的创建时间
SIZE		精选的大小

#可选项
  -a, --all           Show all images (default hides intermediate images) #显示所有镜像
  -f, --filter filter   Filter output based on conditions provided #过滤
  -q, --quiet           Only show numeric IDs #只显示id
  

docker search 名称在docker hub中查询镜像

[root@Eva overlay2]# docker search mysql
NAME                              DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   9629                [OK]                
mariadb                           MariaDB is a community-developed fork of MyS…   3497                [OK]                
mysql/mysql-server                Optimized MySQL Server Docker images. Create…   702                                     [OK]
percona                           Percona Server is a fork of the MySQL relati…   490                 [OK]                
centos/mysql-57-centos7           MySQL 5.7 SQL database server                   77                                      
mysql/mysql-cluster               Experimental MySQL Cluster Docker images. Cr…   69               
#可选项
	--filter=STARS=3000 #只搜索STARS是3000以上的

docker pull下载镜像

docker pull 名称[:版本] #版本可省略,默认是最新版

[root@Eva overlay2]# docker pull mysql:5.7
5.7: Pulling from library/mysql #版本号,以及地址
8559a31e96f4: Pull complete 	#分层下载,docker image的核心 联合文件系统
d51ce1c2e575: Pull complete 
c2344adc4858: Pull complete 
fcf3ceff18fc: Pull complete 
16da0c38dc5b: Pull complete 
b905d1797e97: Pull complete 
4b50d1c6b05c: Pull complete 
d85174a87144: Pull complete 
a4ad33703fa8: Pull complete 
f7a5433ce20d: Pull complete 
3dcd2a278b4a: Pull complete 
Digest: sha256:32f9d9a069f7a735e28fd44ea944d53c61f990ba71460c5c183e610854ca4854	#签名
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7	#真实地址

docker rmi删除镜像

[root@Eva overlay2]# docker rmi 9cfcce23593a
Untagged: mysql:5.7
Untagged: mysql@sha256:32f9d9a069f7a735e28fd44ea944d53c61f990ba71460c5c183e610854ca4854
Deleted: sha256:9cfcce23593a93135ca6dbf3ed544d1db9324d4c40b5c0d56958165bfaa2d46a
Deleted: sha256:98de3e212919056def8c639045293658f6e6022794807d4b0126945ddc8324be
Deleted: sha256:17e8b88858e400f8c5e10e7cb3fbab9477f6d8aacba03b8167d34a91dbe4d8c1
Deleted: sha256:c04c087c2af9abd64ba32fe89d65e6d83da514758923de5da154541cc01a3a1e
Deleted: sha256:ab8bf065b402b99aec4f12c648535ef1b8dc954b4e1773bdffa10ae2027d3e00
Deleted: sha256:09687cd9cdf4c704fde969fdba370c2d848bc614689712bef1a31d0d581f2007
Deleted: sha256:b704a4a65bf536f82e5d8b86e633d19185e26313de8380162e778feb2852011a
Deleted: sha256:c37206160543786228aa0cce738e85343173851faa44bb4dc07dc9b7dc4ff1c1
Deleted: sha256:12912c9ec523f648130e663d9d4f0a47c1841a0064d4152bcf7b2a97f96326eb
Deleted: sha256:57d29ad88aa49f0f439592755722e70710501b366e2be6125c95accc43464844
Deleted: sha256:b17c024283d0302615c6f0c825137da9db607d49a83d2215a79733afbbaeb7c3
Deleted: sha256:13cb14c2acd34e45446a50af25cb05095a17624678dbafbcc9e26086547c1d74

docker rmi 镜像ID或者名称
docker rmi 镜像ID 镜像ID 镜像ID #删除多个镜像
docker rmi -f $(docker images -aq) #删除全部的镜像

3)容器命令

说明:首先需要下载镜像,之后才能运行成容器,下面以运行CentOS为例:

首先下载镜像:

[root@Eva overlay2]# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
8a29a15cefae: Pull complete 
Digest: sha256:fe8d824220415eed5477b63addf40fb06c3b049404242b31982106ac204f6700
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest

新建并启动容器

docker run [可选项] 镜像名称或ID

# 可选项
	--name="name"	#指定容器名称
	-d				#后台运行
	-it				#使用交互模式运行,进入容器查看内容
	-p				#指定运行的端口  
					-p 8080:8080  主机端口:容器端口
					-p 8080		容器端口(不对外暴露)

#测试:
[root@Eva overlay2]# docker run -it centos /bin/bash #启动并进入容器内部
[root@a82a3f30cdba /]# ls #查看容器内部的centos,基础版本
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@a82a3f30cdba /]#  exit  #退出容器
exit

退出容器内部

exit	#推出容器内部,并停止容器
ctrl + p + q	#退出但不停止容器

docker ps 查看正在运行的容器

[root@Eva overlay2]# docker ps
CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS                                                  NAMES
f3b47f4d17b8        mysql                "docker-entrypoint.s…"   8 weeks ago         Up 47 minutes       0.0.0.0:3306->3306/tcp, 33060/tcp                      mysql

docker ps -a查看所有容器,包括没有运行的

[root@Eva overlay2]# docker ps -a
CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS                     PORTS                                                  NAMES
a82a3f30cdba        centos               "/bin/bash"              7 minutes ago       Exited (0) 3 minutes ago      											loving_mclean

#其他可选项
	-n=?	#只显示最近运行的n个容器
	-q		#只显示容器编号
	-ap		#组合,获取所有容器的id,可用于删除

docker rm 容器ID 删除容器

[root@Eva overlay2]# docker rm f01613c648be e41ffbe686ff  #删除指定容器,不能删除正在运行的容器
f01613c648be
e41ffbe686ff

docker rm -f $(docker ps -aq) #删除所有容器

启动和停止容器

docker start 容器ID	#启动一个停止的容器
docker restart 容器ID	#重启一个容器
docker stop 容器ID	#停止一个正在运行的容器
docker kill 容器ID	#强制停止容器

4)其他常用命令

后台启动容器

docker run -d 镜像名称

[root@Eva overlay2]# docker run -d centos
c324f4e0e0bc6ce5347ffc02f0ab63a33b9ce5e7f37029ca2fc6fab6d38ecf8c

#问题:使用docker ps 发现容器停止了
#原因:docker 容器使用后台运行,就必须要有一个前台进程,docker发现没有应用就停止了
#例如nginx 容器启动之后,发现自己没有提供服务,就会立即停止

查看日志

[root@Eva overlay2]# docker logs -tf --tail 10 f3b47f4d17b8 #查看mysql日志,--tail后跟需要从看到的行数
2020-06-16T04:22:28.400711646Z 2020-06-16T04:22:28.390264Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.19)  MySQL Community Server - GPL.
2020-06-16T05:24:04.958498064Z 2020-06-16 05:24:04+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.19-1debian10 started.
2020-06-16T05:24:05.106042194Z 2020-06-16 05:24:05+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
...

查看容器中的进程

docker top 容器ID

[root@Eva overlay2]# docker top f3b47f4d17b8 #
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
systemd+            21118               21101               0                   13:24               ?                   00:00:45            mysqld

查看镜像元数据

docker inspact 容器ID

[root@Eva overlay2]# docker inspect f3b47f4d17b8
[
    {
        "Id": "f3b47f4d17b84e449b6475ff781574e896e60cdf73a5282bfa6e1d7150afa60f",
        "Created": "2020-04-19T16:23:49.741963292Z",
        "Path": "docker-entrypoint.sh",
        "Args": [
            "mysqld"
        ],
        "State": {
            "Status": "running",
            "Running": true,
		....

进入当前正在运行的容器

通常我们的容器都是后台运行的,需要进入容器修改一些配置时可以使用该命令

#方法一
docker exec -it 容器ID /bin/bash

[root@Eva overlay2]# docker exec -it f3b47f4d17b8 /bin/bash
root@f3b47f4d17b8:/# ls
bin  boot  dev	docker-entrypoint-initdb.d  entrypoint.sh  etc	home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@f3b47f4d17b8:/# exit
exit
    
#方法二
docker attach 容器ID

#区别
# docker exec	#进入容器后开启一个新的终端,可以在里面操作
# docker attach	#进入容器正在执行的终端

容器和主机之间相互拷贝文件

#从容器中拷贝文件到主机
docker cp 容器ID:容器内路径 主机目的路径

#例子
[root@Eva ~]# docker exec -it f3b47f4d17b8 /bin/bash	#进入容器内部
root@f3b47f4d17b8:/# ls
bin  boot  dev	docker-entrypoint-initdb.d  entrypoint.sh  etc	home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@f3b47f4d17b8:/# mkdir hello.world					#创建文件夹
root@f3b47f4d17b8:/# ls 
bin  boot  dev	docker-entrypoint-initdb.d  entrypoint.sh  etc	hello.world  home  lib	lib64  media  mnt  opt	proc  root  run  sbin  srv  sys  tmp  usr  var
root@f3b47f4d17b8:/# exit
exit
[root@Eva ~]# docker cp f3b47f4d17b8:/hello.world ./  	#将容器中的hello.world文件夹拷贝到当前路径
[root@Eva ~]# ls
hello.world 

#从主机中拷贝文件到容器。也可以使用后面介绍的挂载 -v 实现
docker cp 主机目的路径 容器ID:容器内路径

查看容器的性能使用情况

[root@Eva ~]# docker stats


CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
f3b47f4d17b8        mysql               0.49%               369MiB / 1.795GiB     20.08%              0B / 0B             0B / 0B             39

5)小结

Docker学习笔记(一):基本概念、Docker安装、阿里云加速、镜像命令、容器命令、其他常用命令_第8张图片

管理命令:                                                                                                               
  config      管理Docker配置
  container   管理容器                                                                                                    
  image       管理镜像
  network     管理网络
  node        管理Swarm节点
  plugin      管理插件
  secret      管理Docker安全
  service     管理服务
  swarm       管理Swarm集群
  system      管理Docker系统
  trust       Manage trust on Docker images                                                                                        
  volume      管理卷
                                                                                                                                   
命令:                                                                                                                          
  attach      将标准输入和标准输出连接到正在运行的容器                                        
  build       使用dockerfile文件创建镜像                                                                                     
  commit      从容器的修改项中创建新的镜像
  cp          将容器的目录或文件复制到本地文件系统中
  create      创建一个新的镜像
  diff        检查容器文件系统的修改
  events      实时输出docker服务器中发生的事件
  exec        从外部运行容器内部的命令
  export      将容器的文件系统到处为tat文件包
  history     显示镜像的历史
  images      输出镜像列表
  import      从压缩为tar文件的文件系统中创建镜像
  info        显示当前系统信息、docker容器与镜像个数、设置信息等
  inspect     使用JSON格式显示容器与镜像的详细信息
  kill        向容器发送kill信号关闭容器
  load        从tar文件或标准输入中加载镜像
  login       登录docker注册服务器
  logout      退出docker注册服务器
  logs        输出容器日志信息
  pause       暂停容器中正在运行的所有进程
  port        查看容器的端口是否处于开放状态
  ps          输出容器列表
  pull        从注册服务器中拉取一个镜像或仓库
  push        将镜像推送到docker注册服务器
  rename      重命名一个容器
  restart     重启一个或多个容器
  rm          删除一个或多个容器,若没有指定标签则删除lastest标签。
  rmi         删除一个或多个镜像,若没有指定标签则删除lastest标签。                                                
  run         在一个新容器中中运行命令,用于指定镜像创建容器。
  save        将一个或多个镜像保存为tar包             
  search      从Docker Hub中搜索镜像
  start       启动一个或多个已经停止的容器
  stats       Display a live stream of container(s) resource usage statistics                                                      
  stop        停止一个或多个正在运行的容器
  tag         设置镜像标签
  top         显示容器中正在运行的进程信息
  unpause     重启pause命令暂停的容器
  update      更新一个或多个容器的配置
  version     显示docker版本信息
  wait        等待容器终止然后输出退出码

你可能感兴趣的:(Docker,后端)