博客列表 >docker入门到进阶二

docker入门到进阶二

.
.原创
2022年04月18日 10:40:23432浏览

常用其他命令
后台启动容器
#命令    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镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像的顶部,容器之下都叫镜像层。

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议