说明:我们有了镜像才可以创建容器,linux,下载一个centos镜像来测试学习
docker pull centosdocker ps 查看docker 容器
#docker ps
# 列出当前正在运行的容器
-a # 列出所有容器的运行记录
-n=? # 显示最近创建的n个容器
-q # 只显示容器的编号
# docker的所有容器
[root@iZwz93j24hpsj03xcor6ieZ /]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b63b4ed25943 centos "/bin/bash" 2 minutes ago Exited (0) 27 seconds ago awesome_goldwasser
d35f85ec7f95 hello-world "/hello" 51 minutes ago Exited (0) 51 minutes ago nice_tereshkova
89859811b5a9 6c3c2a225947 "docker-entrypoint.s…" 54 minutes ago Exited (130) 53 minutes ago infallible_goldwasser
c6a72430eca4 hello-world "/hello" About an hour ago Exited (0) About an hour ago kind_ritchie
35ea51a7b1af rabbitmq:management "docker-entrypoint.s…" 3 days ago Up 52 minutes 4369/tcp, 5671/tcp, 15671-15672/tcp, 15691-15692/tcp, 25672/tcp, 0.0.0.0:5674->5672/tcp rabbit3
94a448ec61d4 rabbitmq:management "docker-entrypoint.s…" 3 days ago Up 52 minutes 4369/tcp, 5671/tcp, 15671-15672/tcp, 15691-15692/tcp, 25672/tcp, 0.0.0.0:5673->5672/tcp rabbit2
fae2e1948d3a rabbitmq:management "docker-entrypoint.s…" 3 days ago Up 52 minutes 4369/tcp, 5671/tcp, 0.0.0.0:5672->5672/tcp, 15671/tcp, 15691-15692/tcp, 25672/tcp, 0.0.0.0:15672->15672/tcp rabbit1
6b33462fa5c5 rabbitmq:management "docker-entrypoint.s…" 6 days ago Exited (128) 6 days ago myrabbit
f6c0a19b1ed8 hello-world "/hello" 4 weeks ago Exited (0) 4 weeks ago busy_newton
# 当前运行的docker容器
[root@iZwz93j24hpsj03xcor6ieZ /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
35ea51a7b1af rabbitmq:management "docker-entrypoint.s…" 3 days ago Up 53 minutes 4369/tcp, 5671/tcp, 15671-15672/tcp, 15691-15692/tcp, 25672/tcp, 0.0.0.0:5674->5672/tcp rabbit3
94a448ec61d4 rabbitmq:management "docker-entrypoint.s…" 3 days ago Up 53 minutes 4369/tcp, 5671/tcp, 15671-15672/tcp, 15691-15692/tcp, 25672/tcp, 0.0.0.0:5673->5672/tcp rabbit2
fae2e1948d3a rabbitmq:management "docker-entrypoint.s…" 3 days ago Up 53 minutes 4369/tcp, 5671/tcp, 0.0.0.0:5672->5672/tcp, 15671/tcp, 15691-15692/tcp, 25672/tcp, 0.0.0.0:15672->15672/tcp rabbit1
退出容器
exit # 直接容器停止并退出 Ctrl + P +Q # 容器退出不停止删除容器
docker rm 容器id #删除指定的容器,不能删除正在运行的容器,强制删除使用 rm -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 #强制停止当前容器
常用其他命令 查看日志
[root@iZwz93j24hpsj03xcor6ieZ ~]# docker logs --help
Usage: docker logs [OPTIONS] CONTAINER
Fetch the logs of a container
Options:
--details Show extra details provided to logs
-f, --follow Follow log output
--since string Show logs since timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes)
-n, --tail string Number of lines to show from the end of the logs (default "all")
-t, --timestamps Show timestamps
--until string Show logs before a timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes)
常用:
docker logs -tf 容器id
docker logs --tail number 容器id #num为要显示的日志条数
查看进程信息
[root@iZwz93j24hpsj03xcor6ieZ ~]# docker top fae2e1948d3a UID PID PPID C STIME TTY TIME CMD polkitd 9068 9049 0 15:20 ? 00:00:00 /bin/sh /opt/rabbitmq/sbin/rabbitmq-server polkitd 9104 9068 0 15:20 ? 00:02:08 /usr/local/lib/erlang/erts-12.2/bin/beam.smp -W w -MBas ageffcbf -MHas ageffcbf -MBlmbcs 512 -MHlmbcs 512 -MMmcs 30 -P 1048576 -t 5000000 -stbt db -zdbbl 128000 -sbwt none -sbwtdcpu none -sbwtdio none -B i -- -root /usr/local/lib/erlang -progname erl -- -home /var/lib/rabbitmq -- -pa -noshell -noinput -s rabbit boot -boot start_sasl -syslog logger [] -syslog syslog_error_logger false polkitd 9111 9104 0 15:20 ? 00:00:00 erl_child_setup 1048576 polkitd 9136 9068 0 15:20 ? 00:00:00 /usr/local/lib/erlang/erts-12.2/bin/epmd -daemon polkitd 9156 9111 0 15:20 ? 00:00:00 inet_gethost 4 polkitd 9157 9156 0 15:20 ? 00:00:00 inet_gethost 4查看镜像的元数据
[root@iZwz93j24hpsj03xcor6ieZ ~]# docker inspect --help
Usage: docker inspect [OPTIONS] NAME|ID [NAME|ID...]
Return low-level information on Docker objects
Options:
-f, --format string Format the output using the given Go template
-s, --size Display total file sizes if the type is container
--type string Return JSON for specified type
进入当前正在运行的容器
第一种方式:
# docker exec -it 容器id bashshell [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker exec -it c703b5b1911f /bin/bash [root@c703b5b1911f /]# ls bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var [root@c703b5b1911f /]# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 03:31 ? 00:00:00 /bin/sh -c while true;do echo hi;sleep 5;done root 279 0 0 03:54 pts/0 00:00:00 /bin/bash root 315 1 0 03:56 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 5 root 316 279 0 03:56 pts/0 00:00:00 ps -ef
第二种方式:
[root@iZwz93j24hpsj03xcor6ieZ ~]# docker attach fae2e1948d3a
两种方式的区别:
从容器拷贝文件到主机docker exec 进入容器后开启一个新的终端,可以在里面操作
docker attach 进入容器正在执行的终端,不会启动新的进程
docker cp 容器id:容器内路径 目的主机路径
# 进入容器 [root@iZwz93j24hpsj03xcor6ieZ ~]# docker attach ba0fa6189638 [root@ba0fa6189638 /]# cd /home [root@ba0fa6189638 home]# ls # 新建文件 [root@ba0fa6189638 home]# touch test.java # ctrl + q + p # 拷贝容器文件到主机 [root@iZwz93j24hpsj03xcor6ieZ ~]# docker cp ba0fa6189638:/home/test.java /home [root@iZwz93j24hpsj03xcor6ieZ ~]# cd /home [root@iZwz93j24hpsj03xcor6ieZ home]# ls environment test.java www
作业练习 Docker安装Nginx
Docker 安装Nginx
# 1、搜索镜像 建议去docker hub 搜索 [root@iZwz93j24hpsj03xcor6ieZ home]# docker search nginx NAME DESCRIPTION STARS OFFICIAL AUTOMATED nginx Official build of Nginx. # 2、拉取 [root@iZwz93j24hpsj03xcor6ieZ home]# docker pull nginx Using default tag: latest latest: Pulling from library/nginx a2abf6c4d29d: Pull complete a9edb18cadd1: Pull complete 589b7251471a: Pull complete 186b1aaa4aa6: Pull complete b4df32aa5a72: Pull complete a0bcbecc962e: Pull complete Digest: sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31 Status: Downloaded newer image for nginx:latest docker.io/library/nginx:latest # 3、启动容器 -p 映射端口 宿主机端口:容器内部端口 # --name 给容器命名 [root@iZwz93j24hpsj03xcor6ieZ home]# docker run -d --name nginx01 -p 3344:80 nginx 7ec0408fc0e86000fc73639c691e7e294d8434131641af6879f836dbb5ce1f3c # 进入容器 [root@iZwz93j24hpsj03xcor6ieZ home]# docker exec -it 7ec0408fc0e8 /bin/bash root@7ec0408fc0e8:/# ls bin dev docker-entrypoint.sh home lib64 mnt proc run srv tmp var boot docker-entrypoint.d etc lib media opt root sbin sys usr
端口暴露:
思考问题∶我们每次改动nginx配置文件,都需要进入容器内部?十分的麻烦,我要是可以在容器外部提供一个映射路径,达到在容器修改文件名,容器内部就可以自动修改?-v数据卷!
Docker 安装一个tomcatDocker 安装一个tomcat
# 官方的使用 $ docker run -it --rm tomcat:9.0 # 我们之前的使用都是后台使用,停止了容器之后,容器可以通过docker ps -a 查到 # $ docker run -it --rm tomcat:9.0 这种方法用来测试 用完就删除 # 下载并启动 docker pull tomcat:9.0 # 启动运行 docker run -d -p 3355:8080 --name tomcat01 tomcat # 访问没问题 # 进入容器发现命令少了,webapps里面啥都没有。 阿里云的原因。默认是最小的镜像,所有不必要的全部剔除 # 保证最小可运行的环境 [root@iZwz93j24hpsj03xcor6ieZ home]# docker exec -it 7cbbe5e22e45 /bin/bashDocker安装ES+Kibana
Docker安装ES+Kibana
## es 暴露的端口很多! es 十分耗内存 es的数据一般需要放置到安全目录 ! 挂载 # --net somenetwork 网络配置 # 安装并运行 docker run -d --name elasticsearch --net somenetwork -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:8.1.3 # docker stats 查看doker cpu 状态 # 修改es配置文件 docker run -d --name elasticsearch --net somenetwork -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:8.1.3可视化(图形化管理工具Portaniner安装)
Portaniner是Docker的图形化管理工具,类似的工具还有Rancher(CI/CD再用)
下载运行Portaniner镜像并运行,设置本机映射端口为8088
docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer



