此篇为Docker笔记,文章可能存在疏忽,建议直接观看原视频。
视频地址:https://www.bilibili.com/video/BV1og4y1q7M4?spm_id_from=333.999.0.0
Docker基本组成 和 基本命令

- 镜像 image:就好比一个模板,可以通过这个模板创建容器服务。例如:tomcat镜像===>run===>tomcat容器(提供服务),通过这个镜像可以创建多个容器(最终服务/项目运行就是在容器中);
 - 容器 container:Docker运用容器技术,运行一个或一组应用;操作:启动、停止、删除;
 - 仓库 repository:存放镜像的地方;公有仓库、私有仓库;
 
测试安装成功

 
使用帮助:https://docs.docker.com/engine/reference/commandline/cli/
常用命令
镜像和容器的区别?
简单点说,镜像就类似操作系统光盘介质,容器相当于通过光盘安装后的系统。通过光盘(镜像),我们能在不同机器上部署系统(容器),系统内的操作只会保留在当前的系统(容器)中,如果要升级系统,需要使用到光盘,但是可能会导致操作系统的数据丢失
镜像命令
docker images
$ docker images
REPOSITORY    TAG       IMAGE ID       CREATED      SIZE
hello-world   latest    feb5d9fea6a5   4 days ago   13.3kB
#只显示image id
$ docker images -q
feb5d9fea6a5
 
docker search 查询 (或者直接在dockerhub上查询)
$ docker search mysql
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   11480     [OK]       
mariadb                           MariaDB Server is a high performing open sou…   4356      [OK]       
mysql/mysql-server                Optimized MySQL Server Docker images. Create…   849                  [OK]
# 可选项
--filter=STARS=4000 # 过滤 STARS大于4000的镜像
 
docker pull 下载
# 默认下载最新版 [:tag]指定版本  docker pull mysql:5.7
$ docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
07aded7c29c6: Pull complete  # 分层下载 docker image的核心 联合文件系统
f68b8cbd22de: Pull complete 
30c1754a28c4: Pull complete 
1b7cb4d6fe05: Pull complete 
79a41dc56b9a: Pull complete 
00a75e3842fb: Pull complete 
b36a6919c217: Pull complete 
635b0b84d686: Pull complete 
6d24c7242d02: Pull complete 
5be6c5edf16f: Pull complete 
cb35eac1242c: Pull complete 
a573d4e1c407: Pull complete 
Digest: sha256:4fcf5df6c46c80db19675a5c067e737c1bc8b0e78e94e816a778ae2c6577213d  # 签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest  # docker pull mysql 等价于 docker pull docker.io/library/mysql:latest$ docker pull mysql:5.7
5.7: Pulling from library/mysql
07aded7c29c6: Already exists # 已经存在的资源不会重复下载
f68b8cbd22de: Already exists 
30c1754a28c4: Already exists 
1b7cb4d6fe05: Already exists 
79a41dc56b9a: Already exists 
00a75e3842fb: Already exists 
b36a6919c217: Already exists 
5e11fe494f45: Pull complete 
9c7de1f889a7: Pull complete 
cf6a13d05a76: Pull complete 
fc5aa81f393a: Pull complete 
Digest: sha256:360c7488c2b5d112804a74cd272d1070d264eef4812d9a9cc6b8ed68c3546189
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
 
docker rmi 删除
$ docker rmi -f 镜像id 镜像id
$ docker rmi -f $(docker iamges -aq) # $()传递参数,表示删除全部镜像
 
容器命令
有了镜像才可以创建容器,下载一个centos镜像来测试。
$ docker pull centos
 
新建容器并启动
$ docker run [可选参数] imageId
# 参数说明
--name="Name"        容器名称
-d                   后台运行方式
-it                  使用交互方式运行,进入容器查看内容
-p                   指定容器端口-p ip:主机端口:容器端口-p 主机端口:容器端口-p 容器端口容器端口
-P                   随机指定端口# 启动并进入容器  -it 以交互的方式运行
[root@zcz /]$ docker run -it centos
[root@46e93dbe3361 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@46e93dbe3361 /]# exit
 
列出运行中的容器
#docker ps-a # 正在运行的容器 + 曾经运行的容器-n=? # 最近创建的容器-q # 显示正在运行的容器id
$ docker ps
$docker ps -a 
CONTAINER ID   IMAGE         COMMAND       CREATED         STATUS                     PORTS     NAMES
46e93dbe3361   centos        "/bin/bash"   4 minutes ago   Exited (0) 2 minutes ago             goofy_gagarin
f1e91564c179   hello-world   "/hello"      24 hours ago    Exited (0) 24 hours ago              distracted_chaplygin 
退出容器
exit # 退出并停止容器
Ctrl + P + Q # 退出容器,但不停止
 
删除容器
$ docker rm 容器id 容器id # 不能删除运行中的容器,可以使用-f强制删除
$ docker rm -f $(docker ps -aq) # 删除所有容器
$ docker ps -a -q|xargs docker rm  
 
启动和停止容器
$ docker start 容器id
$ docker restart 容器id
$ docker stop 容器id
$ docker kill 容器id # 强制停止
 
其他命令
后台启动
# 通过镜像启动容器
$ docker run -d centos
# 常见的坑:后台启动之后,docker ps发现centos停止了,why?
# 容器后台运行,就必须要有一个前台程序,docker发现没有应用,就会停止。
 
查看CPU状态
$ docker stats
 
查看日志
$ docker logs -ft --tail 10 容器id 
 
查看容器中进程信息
$ docker top 容器id
 
查看镜像元数据
$ docker inspect 镜像id
 
进入当前正在运行的容器
# 通常容器都是以后台方式运行,有时需要进入容器,修改一些配置
$ docker exec -it 容器id /bin/bash # 进入容器之后开启一个新的终端
# 方式二
$ docker attach 容器id    # 进入容器正在执行的终端,不会启动新进程
 
从容器拷贝文件到主机
$ docker cp 容器id:容器内路径 目的主机路径
# 后期可以使用卷的技术实现一个同步
[root@0c219b26f861 /]# cd home/
[root@0c219b26f861 home]# ls
[root@0c219b26f861 home]# touch hello.go
[root@0c219b26f861 home]# ls
hello.go
[root@0c219b26f861 home]# exit
exit
root@zcz:/home$ docker cp 0c219b26f861:/home/hello.go /home/
root@zcz:/home$ ls
hello.go  zhuchangzhen
 
小结
