docker easy version

dockerhub.com仓库地址

msdn.itellyou.cn BT资源

啥子是容器
容器是隔离的环境中运行的一个进程,如果进程结束,容器就会停止,容器的隔离环境,拥有自己的ip地址,系统文件,主机名,进程管理
程序: 代码,软件,命令
进程:正在运行的程序
容器和虚拟机的区别
虚拟机: 硬件cpu支持(vt虚拟化),模拟计算硬件,走正常的开机启动
centos6启动流程:开机自检-MBR引导-GRUB菜单-运行系统第一个进程init-加载系统运行级别配置文件-运行脚本(rc.local等)-运行mingetty进程
centos7或8启动流程:开机自检-MBR引导-GRUB2菜单-运行系统第一个进程systemd-加载系统运行级别配置文件-读取系统初始化配置文件-加载/etc/systemd/system目录中的信息-运行mingetty进程
容器: 不需要硬件cpu的支持,共用宿主机内核,启动容器的第一个进程
容器优势: 启动快,性能高,损耗少,轻量级
docker-ce安装
主机名内存ip
docker012G10.0.0.11
docker022G10.0.0.11
安装docker-ce
rm -fr /etc/yum.repos.d/local.repo
echo "192.168.13.251  mirrors.aliyun.com" >>/etc/hosts
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
tar xf docker_rpm.tar.gz 
cd docker_rpm/
yum localinstall *.rpm -y
#安装包在本地
#验证
[root@docker01 ~]# docker version 
Client: Docker Engine - Community
 Version:           20.10.6
 API version:       1.41
 Go version:        go1.13.15
 Git commit:        370c289
 Built:             Fri Apr  9 22:45:33 2021
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true
docker内容
docker是一个cs架构, docker主要:镜像  容器   仓库  网络  存储   监控
docker是一个软件的打包技术

[root@docker02 ~]# docker  run -d  -p 80:80  docker.mirrors.ustc.edu.cn/library/nginx
7697ad097eda988a6e90aedfc7fed68961a09c55574690931e744141a597326d
#run   创建并启动一个容器
#-d    放后台启动
#-p    端口映射
#docker.mirrors.ustc.edu.cn/library/nginx 镜像地址
#nginx 镜像名称
docker镜像常用命令
#搜索镜像,优先选官方,stars好评数量多
[root@docker02 ~]# docker search centos7 
NAME                                DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
ansible/centos7-ansible             Ansible on Centos7                              133                  [OK]
paigeeworld/centos7                 Centos7 with apache, iperf3, nmap, ssh          5                    
ryanj/centos7-s2i-nodejs            STOP RUNNING YOUR APP BUILDS AS ROOT!! Use t…   5                    
flyceek/centos7-jdk                 centos7-jdk                                     5                    [OK]

#拉取镜像(下载镜像),注意版本
[root@docker02 ~]# docker pull ansible/centos7-ansible 
Using default tag: latest
latest: Pulling from ansible/centos7-ansible
45a2e645736c: Downloading [================>                                  ]  23.04MB/70.39MB
1c3acf573616: Downloading [==================>                                ]  21.94MB/59.73MB
edcb61e55ccc: Download complete 
cbae31bad30a: Download complete 
aacbdb1e2a62: Download complete 
fdeea4fb835c: Downloading [=====>                                             ]  7.523MB/69.68MB

#推送镜像(上传镜像)
[root@docker02 ~]# docker push docker.mirrors.ustc.edu.cn/library/nginx

Using default tag: latest
The push refers to repository [docker.mirrors.ustc.edu.cn/library/nginx]
64ee8c6d0de0: Layer already exists 

#导入镜像:
[root@docker02 ~]# docker load -i docker_nginx.tar.gz  
-i: 指定导入的文件
b67d19e65ef6: Loading layer [==================================================>]   72.5MB/72.5MB
6eaad811af02: Loading layer [==================================================>]  57.54MB/57.54MB
a89b8f05da3a: Loading layer [==================================================>]  3.584kB/3.584kB
Loaded image: nginx:latest

#导出镜像:
[root@docker02 ~]#docker save centos:7 -o docker_centos7.tar.gz 
-o: 输出到的文件

#查看镜像列表:#docker images=docker image ls
[root@docker02 ~]# docker images 
REPOSITORY                                       TAG       IMAGE ID       CREATED         SIZE
docker.mirrors.ustc.edu.cn/library/nginx         latest    62d49f9bab67   5 days ago      133MB
nginx                                            latest    540a289bab6c   18 months ago   126MB
alpine                                           latest    b7b28af77ffe   21 months ago   5.58MB

#删除镜像:
[root@docker02 ~]# docker rmi centos:7 
Untagged: centos:7
Deleted: sha256:9f38484d220fa527b1fb19747638497179500a1bed8bf0498eb788229229e6e1
Deleted: sha256:d69483a6face4499acb974449d1303591fcbb5cdce5420f36f8a6607bda11854

#镜像打标签
[root@docker02 ~]# docker tag nginx:latest test
[root@docker02 ~]# docker images
nginx   latest    540a289bab6c   18 months ago   126MB
test    latest    540a289bab6c   18 months ago   126MB
docker容器的常用命令
#创建并运行容器 
[root@docker02 ~]# docker run  -d -it -p 80:80  nginx:latest
bfb4d27d7f1b3b50b3366424ffd26e50740e7f8d6e2dffc964bc547ee67540f6
-d: 后台运行;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;

#创建容器
[root@docker02 ~]# docker create --name test2 nginx
eef703b7412974309a487db3ee832fe02c81dafe73cac320ca1c3c9c7e8ebad2
[root@docker02 ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                               NAMES
eef703b74129   nginx          "nginx -g 'daemon of…"   3 seconds ago   Created                                            test2
--name: 为容器指定一个名称;

#启动容器
[root@docker02 ~]# docker start test2
test2

#停止容器
[root@docker02 ~]# docker stop test2
test2

#重启容器
[root@docker02 ~]# docker restart test2
test2

#暂停容器
docker pause test2

#获取容器的日志
docker logs test2
-f : 跟踪日志输出
--since :显示某个开始时间的所有日志
-t : 显示时间戳
--tail :仅列出最新N条容器日志



#在宿主机和容器之间拷贝文件
将主机/www/runoob目录拷贝到容器96f7f14e99ab的/www目录下。
docker cp /www/runoob 96f7f14e99ab:/www/
将容器96f7f14e99ab的/www目录拷贝到主机的/tmp目录中。
docker cp  96f7f14e99ab:/www /tmp/
-L :保持源目标中的链接

#强制停止容器(杀掉一个运行中的容器)
[root@docker02 ~]# docker kill test2 
test2

#查看容器列表
[root@docker02 ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS                        PORTS                               NAMES
eef703b74129   nginx          "nginx -g 'daemon of…"   6 minutes ago   Exited (137) 49 seconds ago                                       test2
bfb4d27d7f1b   nginx:latest   "nginx -g 'daemon of…"   9 minutes ago   Up 9 minutes                  0.0.0.0:80->80/tcp, :::80->80/tcp   vigilant_banach
-a :显示所有的容器,包括未运行的。
-f :根据条件过滤显示的内容。
--format :指定返回值的模板文件。
-l :显示最近创建的容器。
-n :列出最近创建的n个容器。
--no-trunc :不截断输出。
-q :静默模式,只显示容器编号。
-s :显示总的文件大小。

#删除容器
[root@docker02 ~]# docker rm -f test2 
test2
-f:通过 SIGKILL 信号强制删除一个运行中的容器。
-l :移除容器间的网络连接,而非容器本身。
-v :删除与容器关联的卷。
#批量删除所有容器 docker rm -f `docker ps -a -q`

#进入正在运行的容器(分配到一个新终端) 这里的/bin/bash在其他环境下需要使用/bin/sh
[root@docker01 ~]# docker exec -it sleepy_hoover /bin/bash
root@1d3a727e5219:/# 
-d :分离模式: 在后台运行
-i :即使没有附加也保持STDIN 打开
-t :分配一个伪终端

#进入正在运行的容器(使用相同的终端)
#退出快捷键ctrl +p,ctrl +q 如果用ctrl+d的话会stop容器
#要attach上去的容器必须正在运行,可以同时连接上同一个container来共享屏幕(与screen命令的attach类似)。
[root@docker01 ~]# docker attach heuristic_black 
[root@6b77bfcacbde /]# 

#容器想要放在后台一直运行的话,那么容器的初始命令,必须夯住(前台运行),否则容器就会退出.
前台运行
nginx -g 'daemon off;'
/usr/sbin/php-fpm --nodaemonize
/usr/sbin/sshd -D

#查看容器中运行的进程信息。
[root@docker01 ~]# docker top distracted_villani 
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                33280               33260               0                   21:38               pts/0               00:00:00            /bin/bash

#提交镜像
[root@docker01 ~]# docker commit -a "wyd" -m "LNMP" a404c6c174a2  Nginx:v1
-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
-p :在commit时,将容器暂停。

#检查容器里文件结构的更改
[root@docker01 ~]# docker diff mymysql
A /logs
A /mysql_data
C /run
C /run/mysqld
A /run/mysqld/mysqld.pid
A /run/mysqld/mysqld.sock
C /tmp

#获取容器的日志
[root@docker01 ~]# docker logs -f mymysql    #跟踪查看容器mymysql的日志输出。
[root@docker01 ~]# docker logs --since="2019-09-10" --tail=10 mymysql #查看容器mymysql从2020年9月10日后的最新10条日志。
-f : 跟踪日志输出
--since :显示某个开始时间的所有日志
-t : 显示时间戳
--tail :仅列出最新N条容器日志

#将文件系统作为一个tar归档文件导出到本地
[root@docker01 ~]# docker export -o mysql-`date +%Y%m%d`.tar a404c6c174a2 #将id为a404c6c174a2的容器按日期保存为tar文件。
[root@docker01 ~]# ls mysql-`date +%Y%m%d`.tar
mysql-20190910.tar
-o :将输入内容写到文件

#查看指定镜像的创建历史
[root@docker01 ~]# docker history LNMP_nginx:v3  #查看本地镜像LNMP_nginx:v3的创建历史
-H :以可读的格式打印镜像大小和日期,默认为true
--no-trunc :显示完整的提交记录
-q :仅列出提交记录ID

#获取容器/镜像的元数据
[root@docker01 ~]# docker inspect LNMP_nginx:v3  #获取镜像LNMP_nginx:v3的元数据
-f :指定返回值的模板文件。
-s :显示总的文件大小。
--type :为指定类型返回JSON。

#查看容器使用的状态(动态)=监控
[root@docker01 ~]# docker stats wordpress_db_1 
--no-stream:静态看状态

#暂停容器中所有的进程(类似于挂起容器)
[root@docker01 ~]# docker pause wordpress_db_1
#恢复容器中所有的进程
[root@docker01 ~]# docker unpause wordpress_db_1

docker port 查看端口(鸡肋)=docker ps -a 也可以看到端口

#用来删除不再使用的 docker 对象 
docker image prune             #删除 所有未被 tag 标记和未被容器使用的镜像:
docker image prune -a          #删除 所有未被容器使用的镜像
docker container prune         #删除 所有停止运行的容器
docker network prune           #删除 所有网络
docker volume prune            #删除 所有未被挂载的卷
docker system prune            #删除 docker 所有资源

#将容器重命名
docker rename 原容器名称 新容器名称

#修改初始创建的容器的配置文件及配置信息
docker update test2 --cpus 2   #将容器的cpu升级为2核

docker wait   状态码(鸡肋)=docker ps -a 也可以看到状态码