Docker常用命令
帮助命令
docker version
docker info #显示docker的系统信息
docker 命令 --help #命令的帮助信息
官网帮助文档 https://docs.docker.com/reference/
镜像命令
docker images 查看所有本地的主机上的镜像
[root@shop /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 300e315adb2f 12 hours ago 209MB
mariadb latest 3a348a04a815 12 days ago 407MB
elasticsearch 7.6.2 f29a1ee41030 8 months ago 791MB
# 解释
REPOSITORY 镜像的仓库源
TAG 镜像的标签/版本
IMAGE ID 镜像id
CREATED 镜像的创建时间
SIZE 镜像的大小
# 可选项
-a, --all 显示所有镜像(默认隐藏中间镜像)
-f, --filter filter 根据所提供的条件过滤输出
-q, --quiet 只显示镜像的ID
docker search 搜索镜像
[root@shop /]# docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 10243 [OK]
mariadb MariaDB is a community-developed fork of MyS… 3784 [OK]
mysql/mysql-server Optimized MySQL Server Docker images. Create… 749 [OK]
percona Percona Server is a fork of the MySQL relati… 514 [OK]
# 可选参数
-f, --filter filter Filter output based on conditions provided
--format string Pretty-print search using a Go template
--limit int Max number of search results (default 25)
--no-trunc Don't truncate output
# 搜索start数量大于300的
docker pull 下载镜像
# 下载镜像 docker pull 镜像名[:tag]
[root@shop /]# docker pull mysql # 如果不写tag,默认就是latest
Using default tag: latest
latest: Pulling from library/mysql
852e50cd189d: Pull complete # 分层下载,docker images的核心,联合文件系统
29969ddb0ffb: Pull complete
a43f41a44c48: Pull complete
5cdd802543a3: Pull complete
b79b040de953: Pull complete
938c64119969: Pull complete
7689ec51a0d9: Pull complete
a880ba7c411f: Pull complete
984f656ec6ca: Pull complete
9f497bce458a: Pull complete
b9940f97694b: Pull complete
2f069358dc96: Pull complete
Digest: sha256:4bb2e81a40e9d0d59bd8e3dc2ba5e1f2197696f6de39a91e90798dd27299b093 # 签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest # 真实地址
#下载指定版本的镜像
[root@shop /]# docker pull mysql:5.7
5.7: Pulling from library/mysql
852e50cd189d: Already exists
29969ddb0ffb: Already exists
a43f41a44c48: Already exists
5cdd802543a3: Already exists
b79b040de953: Already exists
938c64119969: Already exists
7689ec51a0d9: Already exists
36bd6224d58f: Pull complete
cab9d3fa4c8c: Pull complete
1b741e1c47de: Pull complete
aac9d11987ac: Pull complete
Digest: sha256:8e2004f9fe43df06c3030090f593021a5f283d028b5ed5765cc24236c2c4d88e
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
docker rmi 删除镜像
[root@shop /]# docker rmi -f ae0658fdbad5 #删除指定的镜像
[root@shop /]# docker rmi -f 容器id 容器id 容器id # 删除多个镜像
[root@shop /]# docker rmi -f $(docker images -aq) # 删除所有的镜像
容器命令
说明:有了镜像才能启动容器
新建容器并启动
[root@shop /]# docker run -it centos /bin/bash
[root@390c4d02180e /]#
# 参数说明
--name
-a 附加到标准输入、标准输出或标准输出
-c CPU共享(相对权重)
-d 在后台运行容器并且打印id Run container in background and print container ID
-e 设置环境变量
-h 容器主机名
-i 保持STDIN打开,即使没有附加
-l 在容器上设置元数据
-m 内存容量上限
-p 指定端口
主机端口:容器端口
ip:主机端口:容器端口
容器端口
-P 将所有公开的端口发布到随机端口
-t 分配一个 pseudo-TTY
-u 用户名或UID(格式:< name| UID >[:<group|gid>])
-v 绑定挂载卷
-w 容器内的工作目录
# 从容器中退出到主机
[root@390c4d02180e /]# exit
exit
[root@shop /]#
列出所有运行的容器
[root@shop /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@shop /]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
390c4d02180e centos "/bin/bash" 10 minutes ago Exited (0) 9 minutes ago infallible_aryabhata
edc034ef454d centos "/bin/bash" 42 minutes ago Exited (0) 42 minutes ago sharp_jang
[root@shop /]# docker ps -aq
390c4d02180e
edc034ef454d
退出容器
exit # 退出并停止容器
ctrl + P + Q # 退出不停止
删除容器
docker rm 容器id
docker rm -f $(docker ps -aq)
docker ps -aq | xargs docker rm
启动和停止容器的操作
docker start <容器 ID>
docker restart <容器 ID>
docker stop <容器 ID>
docker kill <容器 ID>
常用的其他命令
后台启动容器
# 命令docker run-d镜像名!
[root@shop /]#docker run -d centos
#问题dockerps,发现centos停止了
#常见的坑:docker容器使用后台运行,就必须要有要一个前台进程,docker发现没有应用,就会自动停止
#nginx,容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了|
查看日志命令
docker logs -tf --tail 条数 容器id # 显示条数
docker logs -tf 容器id #显示所有的日志
查看容器内部的进程信息
docker top <容器 ID>
查看元数据
docker inspect <容器 ID>
进入当前正在运行的容器
# 我们通常容器都是使用后台方式运行的,需要进入容器,修改一些配置
# 命令
docker exec -it <容器 ID> /bin/bash
# 方式二
docker attach <容器 ID>
这两个的区别
- exec 进入容器后开启一个新的终端,可以在里面操作(常用)
- attach
从容器内拷贝文件到主机
docker cp <容器 ID>:容器目录 主机目录
拷贝是一个手动过程,未来我们使用 -v 卷的技术,可以实现,自动同步
小结
命令总结
练习 - Docker安装Nginx
# 1、搜索镜像 search建议大家去docker搜索,可以看到帮助文档
# 2、下载镜像pu11
# 3、运行测试
####### 下载镜像 ###########
[root@shop /]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
852e50cd189d: Already exists
571d7e852307: Pull complete
addb10abd9cb: Pull complete
d20aa7ccdb77: Pull complete
8b03f1e11359: Pull complete
Digest: sha256:6b1daa9462046581ac15be20277a7c75476283f969cb3a61c8725ec38d3b01c3
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
####### 查看下载的镜像 ###########
[root@shop /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest bc9a0695f571 13 days ago 133MB
####### 以后台运行的方式启动,并命名为nginx01,将容器的80端口映射到主机的3344上 ###########
[root@shop /]# docker run -d --name nginx01 -p 3344:80 nginx
20224440d8b08b504d750a00a72db5e1feb03650eedad2543ac505eed17728da
[root@shop /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
20224440d8b0 nginx "/docker-entrypoint.…" 5 seconds ago Up 4 seconds 0.0.0.0:3344->80/tcp nginx01
####### 进入nginx01中 ###########
[root@shop /]# docker exec -it nginx01 /bin/bash
root@20224440d8b0:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
root@20224440d8b0:/#
练习2 - Docker安装Tomcat
# 官方的使用
docker run -it--rm tomcat:9.0
# 我们之前的启动都是后台,停止了容器之后,容器还是可以查到docker run-it--rm,一般用来测试,用完就删除
# 下载tomcat镜像
docker pull tomcat
# 运行tomcat镜像,访问会出现404情况,因为tomcat是最小安装,webapp下面没有任何东西。但是有一个webapps.dist文件夹下又这些目录
docker run -d -p 3355:8080 --name tomcat01 tomcat
思考: 我们以后要部署项目,如果每次都要进入容器是不是十分麻烦?我要是可以在容器外部提供一个映射路径,达到在容器修改文件名。
作业三 ES + Kibana
> 一些问题
# es 暴漏的端口很多
# es 十分耗内存
# es的数据一般要放到安全目录!挂载
# --net somenetwork ? 网络配置
# 下载启动Elasticsearch,但是启动后会很卡(因为Elasticsearch十分耗内存)
docker run -d --name elasticsearch01 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elsaticsearch:7.6.2
# 查看状态(cpu、内存)
docker status
# 增加内存的限制
docker run -d --name elasticsearch01 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elsaticsearch:7.6.2
可视化管理工具
Portainer
docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
- 设置admin用户密码,需要输入两次相同的密码