Docker常用命令
docker version
查看docker版本信息
docker info
查看docker系统信息 system
级别
docker help
查看帮助信息 命令
docker
CLI文档 & 帮助文档
镜像命令
docker images
Jeffrey@Jeffrey ~ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql latest 3218b38490ce 4 weeks ago 516MB
centos latest e6a0117ec169 4 months ago 272MB
解释
REPOSITORY
镜像的仓库源TAG
镜像的标签IMAGE ID
镜像的IDCREATED
镜像的创建时间- `
SIZE
镜像的大小
**可选项 **
-a, --all #列出所有的镜像
-q, --quiet #只显示镜像的id
搜索镜像 docker search
Jeffrey@Jeffrey / docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 11997 [OK]
mariadb MariaDB Server is a high performing open sou… 4595 [OK]
......
**可选项 **
-f, --filter filter #过滤 docker search --filter=STARS=3000 过滤STARS大于3000的
下载镜像 docker pull
docker pull 镜像名 [:tag]
指定版本,不写TAG 默认最新的
Jeffrey@Jeffrey / docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
latest: Pulling from library/mysql
no matching manifest for linux/arm64/v8 in the manifest list entries
#由于Mac M1 是M1芯片,官方包支持,所以过滤搜索支持的
#=============================================================================
Jeffrey@Jeffrey / docker pull --platform linux/x86_64 mysql
Using default tag: latest
latest: Pulling from library/mysql
72a69066d2fe: Pull complete #docker image的核心 =》 分层下载
93619dbc5b36: Pull complete
99da31dd6142: Pull complete
626033c43d70: Pull complete
37d5d7efb64e: Pull complete
ac563158d721: Pull complete
d2ba16033dad: Pull complete
688ba7d5c01a: Pull complete
00e060b6d11d: Pull complete
1c04857f594f: Pull complete
4d7cfa90e6ea: Pull complete
e0431212d27d: Pull complete
Digest: sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709 #签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest #docker的真实地址
# docker pull --platform linux/x86_64 mysql ===等价于=== docker.io/library/mysql:latest
删除镜像 docker rmi -f
docker rmi -f 18e5af790473 # 根据容器id进行删除
#docker rmi -f 容器id 容器id2 容器id3 容器di4
docker rmi -f $(docker images -aq) #查询出所有的镜像id 进行递归批量**容器命令**
容器命令
说明:有了镜像才可以创建容器,linux,下载一个centos镜像测试学习*
创建/运行容器
docker pull centos
docker run [可选参数] image
#创建容器
docker pull centos
#运行容器
docker run [可选参数] image
#常用参数
--name="Name" 容器名称 tomcat01
-d 后台方式运行
-i -t 交互方式运行,进入容器查看内容
-p 指定容器的端口:8080:8080
-p IP:主机端口:映射容器端口
-p 主机端口:映射容器端口(常用)
-p 容器端口
容器端口
-P 随机指定端口
#例子
Jeffrey@Jeffrey > docker run -it centos /bin/bash
[root@b370ddb8872d /]# ls
查看容器
docker ps
#列出所有运行的容器
Jeffrey@Jeffrey / docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
# docker ps
-a 列出当前运行的容器+历史运行过的容器
-n=Num 列出最进运行过的容器
-q 只显示容器的编号
-aq 只显示(当前运行+历史运行)的容器的编号
退出容器
#直接退出容器,容器停止
[root@b370ddb8872d /]# exit
#退出容器,容器不停止
Ctrl + P + Q
删除容器
docker rm -f $(docker ps -aq)
||docker ps -a -q|xargs docker rm
#删除指定的容器,不能删除正在运行的容器,强制删除: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 杀掉当前正在运行的容器
常用其他命令
后台启动容器
docker run -d centos
#docker run -d 镜像名称
Jeffrey@Jeffrey ~ docker run -d centos
bf8c16435567538a9f2052803ac3f2735af1071c5e062a962b875d6ddfa00b3f
Jeffrey@Jeffrey ~ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
#注意:docker ps 发现容器停止了
#常见的坑:docker容器使用后台运行,就必须有一个前台进程,docker发现没有应用,就会自动停止
#以上的centos 在容器启动后,发现自己没有提供服务,就会立刻停止
查看日志
docker logs -t -f --tail [:number] 容器id
docker logs -t -f --tail [:number] 容器id
## 显示日志
-tf #显示所有日志
--tail nums #显示指定数量的日志信息
###测试 | 编写一段脚本进行测试
Jeffrey@Jeffrey ~ docker run -d centos /bin/sh -c "while true;do echo Jeffrey;sleep 1;done"
177dd25b70615257abab44a241797fa7e226a22fd1b1e9c2909c6c4fdfd42535
Jeffrey@Jeffrey ~ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
177dd25b7061 centos "/bin/sh -c 'while t…" 4 seconds ago Up 3 seconds busy_sinoussi
Jeffrey@Jeffrey ~ docker logs -tf --tail 10 177dd25b7061
2022-01-21T07:22:50.346652796Z Jeffrey
2022-01-21T07:22:51.353023921Z Jeffrey
2022-01-21T07:22:52.361788380Z Jeffrey
2022-01-21T07:22:53.371457547Z Jeffrey
2022-01-21T07:22:54.376483631Z Jeffrey
2022-01-21T07:22:55.380710007Z Jeffrey
2022-01-21T07:22:56.384901757Z Jeffrey
2022-01-21T07:22:57.395018841Z Jeffrey
2022-01-21T07:22:58.405004341Z Jeffrey
2022-01-21T07:22:59.413037967Z Jeffrey
2022-01-21T07:23:00.420680509Z Jeffrey
.......
查看容器中的进程信息
docker top 容器ID
docker top 容器ID
Jeffrey@Jeffrey ~ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
177dd25b7061 centos "/bin/sh -c 'while t…" 6 minutes ago Up 6 minutes busy_sinoussi
Jeffrey@Jeffrey ~ docker top 177dd25b7061
UID PID PPID C STIME TTY TIME CMD
root 4381 4356 0 07:22 ? 00:00:00 /bin/sh ********* sleep 1;done
root 4832 4381 0 07:29 ? 00:00:00 /usr/bin ********* leep /usr/bin/sleep 1
查看容器元数据信息
docker inspect 容器ID
Jeffrey@Jeffrey ~ docker inspect 177dd25b7061
[
{
"Id": "177dd25b70615257abab44a241797fa7e226a22fd1b1e9c2909c6c4fdfd42535",
"Created": "2022-01-21T07:22:35.987721595Z",
"Path": "/bin/sh",
"Args": [
"-c",
"while true;do echo Jeffrey;sleep 1;done"
],
"State": {
`*******`
},
"Image": "sha256:e6a0117ec169eda93dc5ca978c6ac87580e36765a66097a6bfb6639a3bd4038a",
`********`
}
}
]
进入当前运行的容器
docker exec -it 容器ID baseShell
docker attach 容器ID
*区别:
exec
进入容器后,打开一个新的终端(常用)*
attach
进入容器正在运行的终端,不会启动新的线程
Jeffrey@Jeffrey ~ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
177dd25b7061 centos "/bin/…" 20 minutes ago Up 20 minutes busy_sinoussi
Jeffrey@Jeffrey ~ docker exec -it 177dd25b7061 /bin/bash
[root@177dd25b7061 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
从容器内拷贝文件到主机
docker cp 容器ID:容器内路径 目标主机路径
#容器内创建文件
Jeffrey@Jeffrey ~ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c5faef731d6e centos "/bin/bash" 25 seconds ago Up 24 seconds vigilant_joliot
#进入docker容器内部
Jeffrey@Jeffrey ~ docker attach c5faef731d6e
[root@c5faef731d6e /]# cd home/
[root@c5faef731d6e home]# ls
[root@c5faef731d6e home]# touch test.php
[root@c5faef731d6e home]# exit #退出不影响
#进行文件Copy
Jeffrey@Jeffrey ~ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c5faef731d6e centos "/bin/bash" About a minute ago Exited (127) 37 seconds ago vigilant_joliot
bf8c16435567 centos "/bin/bash" 46 minutes ago Exited (0) 46 minutes ago wizardly_liskov
2c924d3240f0 centos "/bin/bash" 58 minutes ago Exited (0) 57 minutes ago elastic_sanderson
Jeffrey@Jeffrey ~ docker cp c5faef731d6e:/home/test.php /Users/Jeffrey/PhpWwwRoot/dingoApi
Jeffrey@Jeffrey ~ cd /Users/Jeffrey/PhpWwwRoot/dingoApi
Jeffrey@Jeffrey ~/PhpWwwRoot/dingoApi ll
total 0
-rw-r--r-- 1 Jeffrey staff 0B Jan 21 16:03 test.php
## 拷贝是一个手动的过程,未来我们使用-v数据卷的技术,实现自动同步
Docker安装Nginx
#搜索镜像
docker search nginx
#下载镜像
docker pull nginx
#运行nginx容器 -d 后台运行 --name 命名 nginx01 -p 宿主机:容器内部端口
docker run -d --name nginx01 -p 3344:80 nginx
#==========================实例===============================
Jeffrey@Jeffrey ~ docker run -d --name nginx01 -p 3344:80 nginx
940119dd19390a463a44c8037f8cccc9dc8ea3d90df94d92d82dfecb46e45be1
Jeffrey@Jeffrey ~ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
940119dd1939 nginx "/docker-entrypoint.…" 4 seconds ago Up 3 seconds 0.0.0.0:3344->80/tcp nginx01
Jeffrey@Jeffrey ~ curl 127.0.0.1:3344
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
Jeffrey@Jeffrey ~
图解:端口暴露的概念:相当于端口号的映射
Docker安装Tomcat
官方使用案例
docker run -it --rm tomcat:9.0
–rm 一般用来测试,用完即删除 不加–rm 在容器停止之后,容器还可以查到 除了测试不建议使用
#下载最新版
docker pull tomcat
#启动运行
docker run -d -p 3345:8080 --name tomcat01 tomcat
#http://127.0.0.1:3345/可以访问,但是报错404
#进入容器
docker exec -it tomcat01 /bin/bash
#发现问题
# 1、linux命令不全
# 2、webapps目录下年是空的 【镜像的原因:默认最小镜像,所有必须要的内容都剔除掉了】
# 保证最小可运行的环境
# 发现webapps.dist目录
root@a95b956bc409:/usr/local/tomcat# ls -al
total 176
drwxr-xr-x 1 root root 4096 Dec 21 20:39 .
drwxr-xr-x 1 root root 4096 Dec 21 20:31 ..
-rw-r--r-- 1 root root 18994 Dec 2 22:01 BUILDING.txt
-rw-r--r-- 1 root root 6210 Dec 2 22:01 CONTRIBUTING.md
-rw-r--r-- 1 root root 60269 Dec 2 22:01 LICENSE
-rw-r--r-- 1 root root 2333 Dec 2 22:01 NOTICE
-rw-r--r-- 1 root root 3378 Dec 2 22:01 README.md
-rw-r--r-- 1 root root 6905 Dec 2 22:01 RELEASE-NOTES
-rw-r--r-- 1 root root 16517 Dec 2 22:01 RUNNING.txt
drwxr-xr-x 2 root root 4096 Dec 21 20:39 bin
drwxr-xr-x 1 root root 4096 Jan 25 09:05 conf
drwxr-xr-x 2 root root 4096 Dec 21 20:39 lib
drwxrwxrwx 1 root root 4096 Jan 25 09:05 logs
drwxr-xr-x 2 root root 4096 Dec 21 20:39 native-jni-lib
drwxrwxrwx 2 root root 4096 Dec 21 20:39 temp
drwxr-xr-x 2 root root 4096 Dec 21 20:39 webapps
drwxr-xr-x 7 root root 4096 Dec 2 22:01 webapps.dist
drwxrwxrwx 2 root root 4096 Dec 2 22:01 work
#将webapps.dist目录下的内容 全部拷贝到webapps目录下
root@a95b956bc409:/usr/local/tomcat# cp -r webapps.dist/* webapps
#访问 http://127.0.0.1:3345/ 正常访问 Tomcat
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:tag
# 不限制内存的情况下,特别占内存,服务器会特别卡,下面启动是限制了内存的操作
#启动es
$ docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms=64m -Xmx512m" elasticsearch:7.6.2
docker run -d \
--restart unless-stopped --name btpanel \
-p 8888:8888 \
-p 22:22 \
-p 443:443 \
-p 80:80 \
-p 888:888 \
-v /Users/Jeffrey/DockerMapping/lnmp/wwwroot:/www/wwwroot \
-v /Users/Jeffrey/DockerMapping/lnmp/mysql/data:/www/server/data \
-v /Users/Jeffrey/DockerMapping/lnmp/nginx/vhost:/www/server/panel/vhost \
--privileged=true
btpanel/btpanel:lnmp
docker run -d \
--restart unless-stopped --name btpanel \
-p 8888:8888 \
-p 22:22 \
-p 443:443 \
-p 80:80 \
-p 888:888 \
-v /Users/Jeffrey/DockerMapping/lnmp/wwwroot:/www/wwwroot \
-v /Users/Jeffrey/DockerMapping/lnmp/mysql/data:/www/server/data \
-v /Users/Jeffrey/DockerMapping/lnmp/nginx/vhost:/www/server/panel/vhost \
--privileged=true
btpanel/btpanel:lnmp
docker run -dit \
-p 80:80 \
-p 443:443 \
-p 3306:3306 \
-p 9000:9000 \
-v /Users/Jeffrey/DockerMapping/lnmp/wwwroot:/www \
-v /Users/Jeffrey/DockerMapping/lnmp/mysql/data:/data/mysql \
-v /Users/Jeffrey/DockerMapping/lnmp/mysql:/etc \
-v /Users/Jeffrey/DockerMapping/lnmp/nginx:/usr/local/nginx \
-v /Users/Jeffrey/DockerMapping/lnmp/php7:/usr/local/php7 \
--privileged=true \
--name=lnmp \
2233466866/lnmp
/Users/Jeffrey/DockerMapping/lnmp/wwwroot:/www
/Users/Jeffrey/DockerMapping/lnmp/mysql:/etc/
/Users/Jeffrey/DockerMapping/lnmp/nginx:/usr/local/nginx
/Users/Jeffrey/DockerMapping/lnmp/php7:/usr/local/php7
docker run -d \
--restart unless-stopped --name btpanel \
-p 8888:8888 \
-p 22:22 \
-p 443:443 \
-p 80:80 \
-p 888:888 \
-v /Users/Jeffrey/DockerMapping/lnmp/wwwroot:/www/wwwroot \
-v /Users/Jeffrey/DockerMapping/lnmp/mysql/data:/www/server/data \
-v /Users/Jeffrey/DockerMapping/lnmp/nginx/vhost:/www/server/panel/vhost \
btpanel/btpanel:lnmp
文档更新时间: 2023-12-18 03:25 作者:JeffreyCheung