Docker的常用命令
帮助命令
docker 命令 --help
docker run --help
显示docker版本信息
docker version
显示docker系统信息,包括镜像和容器的数量
docker info
镜像命令
docker images显示本地镜像
Name ,shorthand | Description |
---|---|
- -all , -a | 显示所有镜像 |
- -digests | 显示摘要 |
- -filter , -f | 根据提供的条件过滤输出 |
- -format | Pretty-print images using a Go template |
- -no-trunc | 显示镜像完整id |
- -quiet , -q | 只显示镜像id |
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest d1165f221234 6 weeks ago 13.3kB
REPOSITORY 镜像的仓库源
TAG 镜像的标签
IMAGE ID 镜像的id
CREATED 镜像的创建时间
SIZE 镜像的大小
常用可选项
-a 列出所有镜像
-q 只显示镜像id
docker search 搜索镜像
Name, shorthand | Default | Description |
---|---|---|
- -filter , -f | 根据提供的条件过滤输出 | |
- -format | Pretty-print search using a Go template | |
- -limit | 25 | 限制最大搜索数 |
- -no-trunc | 不截断输出 |
docker search redis
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
redis Redis is an open source key-value store that… 9343 [OK]
docker search tomcat
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
tomcat Apache Tomcat is an open source implementati… 3002 [OK]
常用可选项
--filter
--limit
docker search mysql --filter=STARS=3000
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 10774 [OK]
mariadb MariaDB Server is a high performing open sou… 4057 [OK]
docker search mysql --limit 2
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 10774 [OK]
mysql/mysql-server Optimized MySQL Server Docker images. Create… 793 [OK]
docker pull 下载镜像
Name, shorthand | Default | Description |
---|---|---|
–all-tags , -a | 下载存储库中所有标记的镜像 | |
–disable-content-trust | true | 跳过镜像验证 |
–platform | 如果服务器支持多平台,则设置平台 | |
–quiet , -q | 静默输出 |
docker pull 镜像名[:tag]
[root@docker ~]# docker pull mysql
Using default tag: latest 如果不写 tag,默认就是 latest
latest: Pulling from library/mysql
f7ec5a41d630: Pull complete 分层下载是docker images的核心,联合文件系统
9444bb562699: Pull complete
6a4207b96940: Pull complete
181cefd361ce: Pull complete
8a2090759d8a: Pull complete
15f235e0d7ee: Pull complete
d870539cd9db: Pull complete
493aaa84617a: Pull complete
bfc0e534fc78: Pull complete
fae20d253f9d: Pull complete
9350664305b3: Pull complete
e47da95a5aab: Pull complete
Digest: sha256:04ee7141256e83797ea4a84a4d31b1f1bc10111c8d1bc1879d52729ccd19e20a 签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest 真实地址
它们两个等价
docker pull mysql
docker pull docker.io/library/mysql:latest
我们再去下载mysql:5.7版本
[root@docker ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
f7ec5a41d630: Already exists 已经存在 共用存在的文件
9444bb562699: Already exists
6a4207b96940: Already exists
181cefd361ce: Already exists
8a2090759d8a: Already exists
15f235e0d7ee: Already exists
d870539cd9db: Already exists
cb7af63cbefa: Pull complete 只需要下载不一样的文件
151f1721bdbf: Pull complete
fcd19c3dd488: Pull complete
415af2aa5ddc: Pull complete
Digest: sha256:a655529fdfcbaf0ef28984d68a3e21778e061c886ff458b677391924f62fb457
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 87eca374c0ed 36 hours ago 447MB
mysql latest 0627ec6901db 36 hours ago 556MB
docker rmi删除镜像
docker rmi (i指images) 加IMAGE ID
docker rmi 87eca374c0ed
Untagged: mysql:5.7
Untagged: mysql@sha256:a655529fdfcbaf0ef28984d68a3e21778e061c886ff458b677391924f62fb457
Deleted: sha256:87eca374c0ed97f0f0b504174b0d22b0a0add454414c0dbf5ae43870369f6854
Deleted: sha256:3b035442a2f8d52d6c5c2d83a18c6c21a89b4dc6c89b481bcf40df89087655ce
Deleted: sha256:a223f1762b2c619a59b81fc2304bf4c9b791c777c8bdb19760c09cbd1f061efc
Deleted: sha256:92402939b3fd03bee3745eb90df9799bcb7d0ef92ca8ecf7ef37ad9c8a550084
Deleted: sha256:028b21e33aa4cd9c88acdd194d5cbef25638ffbca8669bfc0da72ad1eb148997
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql latest 0627ec6901db 37 hours ago 556MB
hello-world latest d1165f221234 6 weeks ago 13.3kB
删除所有镜像
docker rmi -f $(docker images -qa)
容器命令
可以在官方文档查看命令参数:帮助文档
有了镜像才能创建容器
下载一个centos镜像
docker pull centos
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 300e315adb2f 4 months ago 209MB
新建容器并启动
docker run [可选参数] image
常用参数
--name='' 容器名字用来区分容器
-it 使用交互方式运行,进入容器
-d 后台运行
-p(小写) 指定容器端口
-p 主机端口:容器端口(常用)
-p 容器端口
-p ip:主机端口:容器端口
-P(大写) 随机指定端口
启动容器
docker run -it centos /bin/bash
列出所有容器
列出所有运行中的容器
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d7930c98cf2f centos "/bin/bash" About a minute ago Up About a minute unruffled_almeida
列出所有容器(运行+未运行的)
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d7930c98cf2f centos "/bin/bash" About a minute ago Up About a minute unruffled_almeida
3ab5b06db7a1 d1165f221234 "/hello" 2 hours ago Exited (0) 2 hours ago optimistic_zhukovsky
-n=? 显示最近创建的容器
docker ps -a -n=1
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d7930c98cf2f centos "/bin/bash" 2 minutes ago Up 2 minutes unruffled_almeida
-q 只显示容器的id
docker ps -qa
d7930c98cf2f
3ab5b06db7a1
退出容器
exit 在容器中直接退出(第一次的容器如果输入exit会直接停止)
Ctrl + P + Q 也可以退出容器
删除容器
删除指定容器
docker rm 容器id
删除所有容器
docker rm -f $(docker ps -qa)
不能删除正在运行的容器,如果要强制删除rm -f
docker rm -f $(docker ps -qa)
d7930c98cf2f
3ab5b06db7a1
或者将容器关闭之后再删除
docker stop 容器id
docker rm 容器id
删除所有容器
docker ps -aq |xargs docker rm
启动和停止容器
启动容器
docker start 容器id
重启容器
docker restart 容器id
停止正在运行的容器
docker stop 容器id
强制停止容器
docker kill 容器id
先创建一个容器
docker run -it -p 8895:8080 --name mao 300e /bin/bash
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bca41f691e98 300e "/bin/bash" 35 seconds ago Up 34 seconds 0.0.0.0:8895->8080/tcp, :::8895->8080/tcp mao
停止容器
[root@docker ~]# docker stop bca4
bca4
常用的其他命令
后台启动
docker run -d 镜像名
docker run -d centos
但是docker ps 发现centos停止了
常见的问题,因为docker容器使用后台运行,就必须要有一个前台进程,docker发现没有前台进程,就会自动停止
我们用tomcat测试
docker pull tomcat
后台启动
docker run -d -p 8090:8080 --name tomcat1 bd431
使用浏览器访问ip:8080
404的原因是tomcat不是完整的,外网访问测试没有问题
我们进入tomcat容器
docker exec -it tomcat1 /bin/bash
发现webapps里没有文件 因为是阿里云镜像默认是最小的镜像,其他不必要的都剔除了,保证最小可运行环境
我们将webapps.dist里面的所有复制到webapps里
root@c75fbf2b4431:/usr/local/tomcat# cp -r webapps.dist/* webapps
刷新浏览器
查看日志
-tf 显示日志
--tail number 要显示日志条数
docker logs -tf --tail 10 fe6a3e56f3d0
docker run -d centos /bin/bash -c "while true;do echo "maomao";sleep 1;done"
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
NAMESd2694a95c412 centos "/bin/bash -c 'while…" 7 seconds ago Up 6 seconds
docker logs -tf --tail 10 d2694a95c412
2021-04-21T08:42:40.823781398Z maomao
2021-04-21T08:42:41.826943919Z maomao
2021-04-21T08:42:42.831924257Z maomao
2021-04-21T08:42:43.834038335Z maomao
2021-04-21T08:42:44.836708178Z maomao
查看容器中进程信息
docker top 容器id
docker top d2694a95c412
查看镜像的元数据
docker inspect 容器id
docker inspect d2694a95c412
进入当前运行的容器
docker exec -it 容器id /bin/bash
docker exec -it d2694a95c412 /bin/bash
[root@d2694a95c412 /]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 11880 1532 ? Ss 08:40 0:00 /bin/bash -c while true;do echo maomao;sleep 1;done
root 740 0.2 0.0 12012 2176 pts/0 Ss 08:53 0:00 /bin/bash
root 786 0.0 0.0 23012 928 ? S 08:53 0:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/
root 787 0.0 0.0 44620 1784 pts/0 R+ 08:53 0:00 ps aux
还有一种进入容器的方法
docker attach 容器id
命令 | 区别 |
---|---|
docker exec | 进入容器后开启一个新的终端,可以在里面操作(一般都用这个) |
docker attach | 进入容器正在执行的终端,不会启动新的终端 |
从容器内拷贝文件到主机上
先开启一个容器
docker run -it --name mao 300e /bin/bash
[root@6fd5dbac170f /]# cd /home/
[root@6fd5dbac170f home]# ls
[root@6fd5dbac170f home]# touch mao.py # 创建一个文件
退出容器
exit
docker cp 6fd5dbac170f:/home/mao.py /home
[root@docker ~]# ls /home/mao.py
/home/mao.py
命令手册
attach # 当前 shell 下 attach 连接指定运行镜像
build # 通过 Dockerfile 定制镜像
commit # 提交当前容器为新的镜像
cp #从容器中拷贝指定文件或者目录到宿主机中
create # 创建一个新的容器,同 run,但不启动容器
diff # 查看 docker 容器变化
events # 从 docker 服务获取容器实时事件
exec # 进入运行中的容器
export # 导出容器的内容流作为一个 tar 归档文件[对应 import ]
history # 展示一个镜像形成历史
images # 列出系统当前镜像
import # 从tar包中的内容创建一个新的文件系统映像[对应export]
info # 显示系统相关信息
inspect # 查看容器详细信息
kill # kill 指定 docker 容器
load # 从一个 tar 包中加载一个镜像[对应 save]
login # 注册或者登陆一个 docker 源服务器
logout # 从当前 Docker registry 退出
logs # 输出当前容器日志信息
port # 查看映射端口对应的容器内部源端口
pause # 暂停容器
ps # 列出容器列表
pull # 从docker镜像源服务器拉取指定镜像或者库镜像
push # 推送指定镜像或者库镜像至docker源服务器
restart # 重启运行的容器
rm # 移除一个或者多个容器
rmi # 移除一个或多个镜像[无容器使用该镜像才可删除,否则需删除相关容器才可继续或 -f 强制删除]
run # 创建一个新的容器并运行一个命令
save # 保存一个镜像为一个 tar 包[对应 load]
search # 在 docker hub 中搜索镜像
start # 启动容器
stop # 停止容器
tag # 给源中镜像打标签
top # 查看容器中运行的进程信息
unpause # 取消暂停容器
version # 查看 docker 版本号
wait # 截取容器停止时的退出状态值
Docker安装nginx
搜索nginx
docker search nginx --limit 2
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 14752 [OK]
jwilder/nginx-proxy Automated Nginx reverse proxy for docker con… 2018 [OK]
拉取镜像
docker pull nginx
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 62d49f9bab67 8 days ago 133MB
后台启动
docker run -d -p 9000:80 --name nginx01 nginx
1e846a00a0e95945c68d6081649f7075459671d5d70ab6f45c6a8814deec156f
curl localhost:9000
Docker安装tomcat
一般用来测试,用完则删除
docker run -it --rm tomcat:9.0
我们只要停掉服务 tomcat容器则被删除了
docker ps -a 找不到tomcat容器
docker pull tomcat:9.0
docker run -it -p 9000:8080 --name tomcat01 bd431ca8553c /bin/bash
进入容器之后
cp -r webapps.dist/* webapps/
cd bin/
./startup.sh
Tomcat started.
测试
curl localhost:8080
外部
curl localhost:9000
Docker部署es+kibana
注意:kibana和es版本必须相同。并且要创建docker网络
安装es
es 暴露的端口很多,并且是否消耗内存
es的数据需要挂载到安全目录
-e 环境配置修改
--net 将容器加入到docker网络
创建网络
docker network create --driver bridge --subnet 192.168.0.0/24 --gateway 192.168.0.1 mynet
查看网络
ip a
18: br-92dce3760956: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:cd:b2:ab:92 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.1/24 brd 192.168.0.255 scope global br-92dce3760956
valid_lft forever preferred_lft forever
安装es
docker run -d --name elasticsearch --net mynet -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.10.1
解决es高消耗的问题
docker stats # 查看docker容器cpu状态
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
851074fa63b1 elasticsearch 0.31% 1.207GiB / 3.842GiB 31.41% 648B / 0B 1.71MB / 1.69MB 46
发现消耗内存1.2个G
停掉es容器
docker stop 851074fa63b1
增加内存限制
docker run -d --name elasticsearch --net mynet -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.10.1
查看cpu
docker stats
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
15b9b703aa9c elasticsearch01 0.62% 371.8MiB / 3.842GiB 9.45% 648B / 0B 0B / 1.61MB 46
curl localhost:9200
安装kibana
运行kibana,同es使用相同版本7.10.1,同样使用mynet网络
docker run -d --name kibana --net mynet -p 5601:5601 kibana:7.10.1
浏览器访问自己ip:5601, 可以查看到kibana 页面,可以访问成功
配置kibanan连接es
删除正在运行的es和kibana
docker rm -f $(docker ps -aq)
新建es数据和配置目录
mkdir -p /data/elasticsearch/{config,data}
新建并写入配置文件
echo "http.host: 0.0.0.0" >> /data/elasticsearch/config/elasticsearch.yml
cat config/elasticsearch.yml
http.host: 0.0.0.0
配置完成,执行命令启动elasticsearch并挂载配置文件到虚拟机目录
docker run -d --name elasticsearch --net mynet -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" -v /data/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /data/elasticsearch/data:/usr/share/elasticsearch/data -v /data/elasticsearch/plugins:/usr/share/elasticsearch/plugins elasticsearch:7.10.1
配置kibana 连接到es
docker run -d --name kibana --net mynet -e ELASTICSEARCH_HOSTS=http://192.168.188.8:9200 -p 5601:5601 kibana:7.10.1