常用其他命令
后台启动容器
#命令 docker run -d 镜像名
[root@localhost ~]# docker run -d centos
#问题docker ps,发现centos停止了
#常见的坑: docker 容器使用后台执行,就必须要有一个前台进程,docker发现没有应用,就会自动停止
Nginx,容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了
查看日志
docker logs -f -t --tail 容器,没有日志
#自己编写一段shell脚本
[root@localhost ~]# docker run -d centos /bin/sh -c "while true;do echo kuangshen;sleep 1;done"
[root@localhost ~]# docker ps
CONTAINERID IMAGE
38254adcfa23 centos
[root@localhost ~]#
#显示日志
-tf #显示日志
--tail number #要显示日志条数
[root@localhost ~]# docker logs -tf --tail 10 38254adcfa23
查看容器中进程信息ps
#命令 docker top +容器ID
[root@localhost ~]# docker top 38254adcfa23
UID PID PPID C STIME TTY TIME CMD
root 18666 18645 0 20:04 ? 00:00:01 /bin/sh -c while true;do echo kuangshen;sleep 1;done
root 19740 18666 0 20:19 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
查看镜像的元数据
docker inspect 容器ID
[root@localhost ~]# docker inspect 38254adcfa23
[
{
"Id": "38254adcfa23d6b3cabd5810d76fff1b8a5c39e364d29eaa051ccef0d8b6b7cc",
"Created": "2022-03-06T12:04:58.195572401Z",
"Path": "/bin/sh",
"Args": [
"-c",
"while true;do echo kuangshen;sleep 1;done"
],
进入当前正在运行的容器
#容器通常使用后台方式运行的,需要进入容器,修改一些配置
#命令 #进入容器并开启一个新的终端,可以在里面操作(常用)
docker exec -it 容器ID bashShell
#测试
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
38254adcfa23 centos "/bin/sh -c 'while t…" 36 minutes ago Up 36 minutes objective_moser
[root@localhost ~]# docker exec -it 38254adcfa23 /bin/bash
[root@38254adcfa23 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@38254adcfa23 /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 12:04 ? 00:00:05 /bin/sh -c while true;do echo kuangshen;sleep 1;done
root 1692 0 0 12:33 pts/0 00:00:00 /bin/bash
root 2190 0 0 12:41 pts/1 00:00:00 /bin/bash
root 2223 1 0 12:41 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
root 2224 2190 0 12:41 pts/1 00:00:00 ps -ef
#方法二
docker attach 容器id
#测试 #attach这个命令会进入正在执行的终端,不会启用新的进程。
[root@localhost ~]# docker attach 容器ID
正在执行当前的代码....
从容器内拷贝到主机上
docker cp 容器id:容器内路径 目的的主机路径
[root@localhost home]# docker cp f2c8956edf2d:/home/test.java /home
安装nginx
#1.搜索镜像 search 建议大家去docker搜索,可以看到帮助文档
#2.下载镜像 pull
#3.运行测试
[root@localhost home]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest c919045c4c2b 5 days ago 142MB
centos latest 5d0da3dc9764 5 months ago 231MB
# -d 后台运行
# --name 给容器命名
# -p 宿主机端口,容器内部端口
[root@localhost home]# docker run -d --name nginx01 -p 3344:80 nginx
ef2ca173f06d103d8ce54054837e045cde511d7dbe94df00b5a5edbd8f1393a9
[root@localhost home]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ef2ca173f06d nginx "/docker-entrypoint.…" 11 seconds ago Up 9 seconds 0.0.0.0:3344->80/tcp, :::3344->80/tcp nginx01
[root@localhost home]# curl localhost:3344
#进入容器
[root@localhost home]# docker exec -it nginx01 /bin/bash
root@ef2ca173f06d:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
root@ef2ca173f06d:/# cd /etc/nginx
root@ef2ca173f06d:/etc/nginx# ls
conf.d fastcgi_params mime.types modules nginx.conf scgi_params uwsgi_params
root@ef2ca173f06d:/etc/nginx#
思考问题:我们每次改动nginx配置文件,都需要进入容器内部? 十分麻烦,我要是可以在容器外部提供一个映射路径,达到在容器修改文件名,容器内部就可以自动修改?-v 数据卷!
安装一个:docker 装tomcat
#官方的使用
docker run -it --rm tomcat:9.0
#我们之前的启动都是后台,停止了容器之后,容器还是查到 docker run it --rm,一般用来测试,用完就删。
#下载在启动
docker pull tomcat
#启动运行
docker run -d -p 3355:8080 --name tomcat01 tomcat
#测试访问没有问题,但页面访问不到
#进入容器
[root@localhost home]# docker exec -it tomcat01 /bin/bash
#发现问题:1.Linux命令少了。2.没有webbapps. 阿里云镜像的原因,默认是最小的镜像,所有不必要的都踢出掉。
#保证最小可运行的环境
root@abba21a609fc:/usr/local/tomcat# cp -r webapps.dist/* webapps 把备份文件考过来,就可以访问页面了
思考问题:我们以后要部署项目,如果每次都都要进入容器是不是十分麻烦?我可以在容器外部提供一个映射路径,webaps,我们在外部放置项目,就自动同步到内部就好了。
作业:部署es+kibana
#es 暴露的端口很多
#es 十分的耗内存
#es 的数据一般需要放置到安全目录!挂载
#--net somenetwork 网络配置
#下载并启动 elasticsearch
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2
#docker stats 查看 Cpu状态
#增加内存的限制,修改配置文件 -e 环境配置修改
docker run -d --name elasticsearch02 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node"
-e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2
可视化
portainer ?(先用这个)
Rancher(CI/CD再用)
什么是 portainer ?
docker图形化管理工具!提供一个后台面板供我们操作!
docker run -d -p 8080:9000 \
--restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
访问测试:外网 :8080
这个可视化面板少用 (账号:admin 密码:12345678)
Docker镜像
是一种独立软件包,包含某个软件运行时的所有内容,包含代码、环境变量等。
如何得到镜像:
从远程仓库下载
朋友拷贝
自己制作一个镜像dockerFile
联合文件系统
docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。
特点
docker镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像的顶部,容器之下都叫镜像层。