Docker学习与应用(二)

注:此为笔者学习狂神说Docker的笔记,其中包含个人的笔记和理解,更多详细资讯请出门左拐B站:狂神说!!!

Docker的常用命令

帮助命令

shell 复制代码
docker version      # 显示docker的版本信息
docker info         # 显示docker的系统信息,包括镜像和容器的数量
docker 命令 --help   # 帮助命令

官方文档:查看命令

https://docs.docker.com/reference/

镜像命令

1.docker images 查看所有本地主机上的镜像
shell 复制代码
[root@xxx ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              bf756fb1ae65        8 months ago        13.3kB

# 解释
REPOSITORY  镜像的仓库源
TAG         镜像的标签
IMAGE ID    镜像的id
CREATED     镜像的创建时间

# 可选项
	-a, --all      # 列出所有的镜像
	-q, --quiet    # 只显示镜像的id
shell 复制代码
[root@xxx ~]# docker  search mysql
NAME                              DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
mysql                             MySQL is a widely used, open-source relation...   9911  

# 可选项
--filter , -f		Filter output based on conditions provided

docker search mysql -f=stars=5000
3.docker pull 下载镜像
shell 复制代码
# 下载镜像 docker pull 镜像名[:tag]
[root@xxx ~]# docker pull mysql
Using default tag: latest # 如果不写tag,默认就是latest
latest: Pulling from library/mysql 
bf5952930446: Pull complete # 分层下载,docker image的核心 联合文件系统
8254623a9871: Pull complete 
938e3e06dac4: Pull complete 
ea28ebf28884: Pull complete 
f3cef38785c2: Pull complete 
894f9792565a: Pull complete 
1d8a57523420: Pull complete 
6c676912929f: Pull complete 
ff39fdb566b4: Pull complete 
fff872988aba: Pull complete 
4d34e365ae68: Pull complete 
7886ee20621e: Pull complete 
Digest: sha256:c358e72e100ab493a0304bda35e6f239db2ec8c9bb836d8a427ac34307d074ed # 签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest # 真实地址

# 两条命令等价
docker pull mysql
docker.io/library/mysql:latest

# 指定版本下载
docker pull mysql:5.7

[root@xxx ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
bf5952930446: Already exists 
8254623a9871: Already exists 
938e3e06dac4: Already exists 
ea28ebf28884: Already exists 
f3cef38785c2: Already exists 
894f9792565a: Already exists 
1d8a57523420: Already exists 
5f09bf1d31c1: Pull complete 
1b6ff254abe7: Pull complete 
74310a0bf42d: Pull complete 
d398726627fd: Pull complete 
Digest: sha256:da58f943b94721d46e87d5de208dc07302a8b13e638cd1d24285d222376d6d84
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
4.docker rmi 删除镜像
shell 复制代码
[root@xxx ~]# docker rmi -f 容器id                # 删除指定的容器
[root@xxx ~]# docker rmi -f  容器id 容器id 容器id  # 删除多个容器
[root@xxx ~]# docker rmi -f $(docker images -aq) # 删除全部容器

容器命令

说明:我们有了镜像才可以创建容器,linux,下载一个centos镜像来测试学习

shell 复制代码
docker pull centos
1.新建容器并启动
shell 复制代码
# 测试,启动并进入容器
[root@xxx bin]# docker run -it centos /bin/bash
[root@xxxxxxxxxxx /]# ls  # 查看容器内的centos,基础版本,很多命令都是不完善的!
bin  etc   lib    lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr

# 从容器中退回主机
[root@xxxxxxxxxx /]# exit
2.列出所有的运行的容器
shell 复制代码
# docker ps 命令
			 # 列出当前正在运行的容器
	-a   # 列出当前正在运行的容器和带出历史运行过的容器
  -n=? # 显示最近创建的容器
  -q   # 只显示容器的编号
3.退出容器
shell 复制代码
exit            # 直接容器停止并退出
Ctrl + P + Q    # 容器不停止退出
4.删除容器
shell 复制代码
docker rm 容器id                  # 删除指定容器,不能删除正在运行的容器,如果要强制删除 rm -f
docker rm -f $(docker ps -aq)    # 删除所有的容器
docker ps -aq|xargs docker rm    # 删除所有的容器
5.启动和停止容器的操作
shell 复制代码
docker start 容器id        # 启动容器
docker restart 容器id      # 重启容器
docker stop 容器id         # 停止当前正在运行的容器
docker kill 容器id         # 强制停止当前容器

常用其他命令

1.后台启动容器
shell 复制代码
# 命令 docker run -d 镜像名
[root@xxx /]# docker run -d centos

# 问题docker ps, 发现 centos 停止了

# 常见的坑, docker容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止
# nginx,容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了
2.查看日志
shell 复制代码
docker logs -f -t --tail 容器,没有日志

# 自己编写一段shell脚本
[root@xxx /]# docker run -d centos /bin/sh -c "while true;do echo kuangshen;sleep 1;done"

# 显示日志
-tf                # 显示日志
--tail number      # 要显示的日志条数

[root@xxx /]# docker logs -ft --tail f1178d5b0bd8
3.查看容器中的进程信息ps
shell 复制代码
# 命令 docker top 容器id

[root@xxx /]# docker top f1178d5b0bd8
UID                 PID                 PPID                C   
root                21626               21609               0   
root                27492               21626               0     
4.查看镜像源数据
5. 进入当前正在运行的容器
shell 复制代码
# 我们通常都是使用后台方式运行的,需要进入容器,修改一些配置

# 命令
docker exec -it 容器id baseShell

# 测试
[root@AlibabaECS ~]# docker ps
CONTAINER ID        IMAGE          COMMAND     CREATED             STATUS         PORTS               NAMES
f1178d5b0bd8        centos              "/bin/sh -c 'while t..."   2 hours ago         Up 2 hours                              stupefied_colden
[root@AlibabaECS ~]# docker exec -it f1178d5b0bd8 /bin/bash
[root@f1178d5b0bd8 /]# ls
bin  etc   lib    lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr
[root@f1178d5b0bd8 /]# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 05:10 ?        00:00:02 /bin/sh -c while true;do echo kuangshen;sleep 1;done
root      8869     0  0 07:38 pts/0    00:00:00 /bin/bash
root      8887     1  0 07:38 ?        00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/
root      8888  8869  0 07:38 pts/0    00:00:00 ps -ef

# 方式二
docker attach 容器id

# 测试
[root@AlibabaECS ~]# docker attach f1178d5b0bd8
正在执行当前的代码...

# docker exec        # 进入容器后开启一个新的终端,可以在里面操作(常用)
# docker attach      # 进入容器正在执行的终端,不会启动新的进程

6. 从容器内拷贝到主机上

shell 复制代码
# 命令
docker cp [r] 容器id :容器内路径 目的地主机路径
# 参数r : 递归拷贝
# 测试
[root@xxx home]# docker cp a485a9d900b4:/home/test.java /home


小结

作业练习

注:安装镜像,最好去官网上搜索,看看有没有

1.安装Nginx
shell 复制代码
# 1. 搜索镜像 search 建议大家去docker搜索,可以看到帮助文档
# 2. 下载镜像 pull
# 3. 运行测试

[root@xxx home]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              4bb46517cac3        2 weeks ago         133MB
centos              latest              0d120b6ccaa8        2 weeks ago         215MB

# -d       后台运行
# --name   给容器命名
# -p       宿主机端口:容器内部端口
[root@xxx home]# docker run -d --name nginx01 -p 3344:80 nginx

[root@xxx home]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
a88edcdfa2e6        nginx               "/docker-entrypoint...."   8 minutes ago       Up 8 minutes        0.0.0.0:3344->80/tcp   nginx01

[root@xxx home]# curl localhost:3344

端口暴露的概念:

在window上查看开放的IP端口

思考问题:

我们每次改动nginx配置文件,都需要进入容器内部,十分的麻烦。我们要是可以在容器外部提供一个映射路径,达到在容器修改文件名,容器内部都可以修改。-v

2.安装Tomcat
shell 复制代码
# 官方的使用
docker run -it --rm tomcat:9.0

# 我们之前的启动都是后台,停止了容器之后,容器还是可以查到 docker run -it --rm, 一般用来测试,用完就删除

# 下载再启动
docker pull tomcat

# 启动运行
docker run -d -p 3355:8080 --name tomcat01 tomcat

# 测试访问没有问题

# 进入容器
[root@AlibabaECS ~]# docker exec -it tomcat01 /bin/bash

# 发现问题:1、linux命令少了,2、没有webapps; 阿里云镜像的原因,默认是最小的镜像,所以没必要都剔除掉
# 保证最小可运行的环境


阉割版的镜像

将webapps.dist的文件拷贝到webapps下

即可正常访问了

思考问题:

我们以后要部署项目,如果每次都要进入容器是不是十分麻烦?我要是可以在容器外部提供一个映射路径,webapps,我们在外部放置项目,就自动同步到内部就好了

3.安装ES + Kibana
shell 复制代码
# es 暴露的端口很多
# es 十分的耗内存
# es 的数据一般需要放置到安全目录! 挂载
# --net somework ? 网络配置

# 启动 elasticsearch
docker run -d --name elasticsearch -p 9200:9300 -e "discovery.type=single-node" elasticsearch:7.6.2

# 启动了 linux就卡住了

# 赶紧关闭,增加内存的限制,修改配置文件 -e 环境配置修改
docker run -d --name elasticsearch02 -p 9200:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2

# 查看 docker stats

作业:

使用kibana连接es? 思考网络如何才能连接过去?

可视化

  • portainer(先用这个)
shell 复制代码
docker run -d -p 8088:9000 \ > --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
  • Rancher(CI/CD再用)

什么是 portainer ?

Docker图形化管理工具,提供一个后台面板供我们操作!

shell 复制代码
docker run -d -p 8088:9000 \
--restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
#-v:将docker服务挂载到本地的8088:9000端口上
#privileged:用于授权的

Docker镜像、容器、进程的命令大汇总

上述狂神老师介绍的命令趋向于日常使用,下面由我来详细梳理docker镜像、容器、其它的命令

镜像命令

shell 复制代码
1.搜索镜像
#从网络上查找需要的镜像
docker search 镜像名称

2.拉取镜像
# 从Docker的仓库下载镜像到本地,镜像名称格式为名称:版本号,如果版本号不指定则是最新的版本。如果不知道镜像版本,可以去Docker Hub搜索对应镜像查看即可。
docker pull 镜像名称

3.查看镜像
# 查看本地镜像
docker images
# 查看本地所有镜像
docker images -a
# 查看本地镜像的id
docker images -q

4.删除镜像
# 删除镜像 -f表示强制删除
docker rmi [-f] 镜像id[镜像名称]
# 删除所有镜像
docker rmi -f $(docker images -qa)

5.打包镜像
docker save 镜像名:版本号 > redis.tar

6.加载镜像
docker load < ./redis.tar

7.修改名称
docker tag 镜像id  name:版本号

容器命令

shell 复制代码
1.查看运行的容器
# 查看正在执行的容器
docker ps
# 查看所有的容器
docker ps -a

2.采集并启动容器
docker run 参数

-i:保持容器运行。通过和-t同时使用。加入-it这两个参数以后,容器创建后会自动进入容器中,退出容器后,容器会自动关闭。
-t:为容器重新分配一个伪输入终端,通常和-i同时使用。
-d:以守护(后台)模式运行容器。创建一个容器在后台运行,需要使用docker exec 进入容器。
-it:创建的容器一般称为交互式容器。
-id:创建的容器一般称为守护式容器、
--name:威创建的容器命名。
-p:映射端口 外部端口:容器内部暴露的端口

3.进入容器
docker exec -it 容器id[容器名称] /bin/bash

4.查看容器信息
docker inspect 容器id[容器名称]

5.停止容器
docker stop 容器id[容器名称]

6.启动容器
docker start 容器id[容器名称]

7.重启容器
docker restart 容器id[容器名称]

8.强制停止容器
docker kill 容器id[容器名称]

9.删除容器
# 需要先停止容器,然后再删除
docker rm 容器id[容器名称]
# 强制删除容器
docker rm -f 容器id[容器名称]
# 强制删除所有容器
docker rm -f $(docker ps -qa)

10.查看容器日志
docker logs -f 容器id[容器名称]

11.容器进程
#top支持 ps 命令参数,格式:docker top [OPTIONS] CONTAINER [ps OPTIONS]
#列出redis容器中运行进程
docker top redis
#查看所有运行容器的进程信息
for i in  `docker ps |grep Up|awk '{print $1}'`;do echo \ &&docker top $i; done

12.导入、导出容器
# 将容器导出为镜像
docker export demo1 > demo1.tar
# 导入镜像
docker import demo1.tar xxx/demo	xxx指定路径

进程操作

shell 复制代码
1.启动docker服务
systemctl start docker

2.停止docker服务
systemctl stop docker

3.重启docker服务
systemctl restart docker

4.查看docker服务状态
systemctl status docker

5.开机自启动docker服务
systemctl enable docker

Docker学习与应用(二)的学习笔记到此完结,笔者归纳、创作不易,大佬们给个3连再起飞吧

相关推荐
大G哥2 小时前
记一次K8S 环境应用nginx stable-alpine 解析内部域名失败排查思路
运维·nginx·云原生·容器·kubernetes
大道归简3 小时前
Docker 命令从入门到入门:从 Windows 到容器的完美类比
windows·docker·容器
zeruns8023 小时前
如何搭建自己的域名邮箱服务器?Poste.io邮箱服务器搭建教程,Linux+Docker搭建邮件服务器的教程
linux·运维·服务器·docker·网站
爱跑步的程序员~3 小时前
Docker
docker·容器
福大大架构师每日一题4 小时前
23.1 k8s监控中标签relabel的应用和原理
java·容器·kubernetes
程序那点事儿4 小时前
k8s 之动态创建pv失败(踩坑)
云原生·容器·kubernetes
疯狂的大狗4 小时前
docker进入正在运行的容器,exit后的比较
运维·docker·容器
长天一色4 小时前
【Docker从入门到进阶】01.介绍 & 02.基础使用
运维·docker·容器
伊玛目的门徒4 小时前
docker 搭建minimalist-web-notepad
运维·docker·notepad
theo.wu7 小时前
使用Buildpacks构建Docker镜像
运维·docker·容器