Docker基础与常用命令
大约 5 分钟
Docker 基础与常用命令
术语
- 镜像:docker镜像好比一个模板,可以通过这个模板来创建容器服务,一个镜像可以创建多个容器
- 容器:docker利用容器技术,独立运行一个或一组应用,是通过镜像来创建的
- 仓库:存放镜像的地方,分为公有和私有仓库
帮助命令
docker version # 查看版本信息
docker info # 显示docker系统详细信息,包括镜像和容器数量
docker --help # docker帮助命令
镜像命令
docker images:查看所有本地的主机上的镜像
sunshine@ubuntu:/var/lib$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
# 解释
REPOSITORY 镜像的仓库源
TAG 镜像的标签
IMAGE ID 镜像的ID
CREATED 镜像的创建时间
SIZE 镜像的大小
# 可选项
-a, --all # 显示全部
-q, --quiet # 只列出镜像的ID
docker search:搜索镜像
sunshine@ubuntu:/var/lib$ docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 12280 [OK]
mariadb MariaDB Server is a high performing open sou… 4722 [OK]
mysql/mysql-server Optimized MySQL Server Docker images. Create… 911 [OK]
# 可选项
--filter=STARS=3000 #搜索出来的镜像star大于3000
docker pull:下载镜像
# docker pull 镜像名
sunshine@ubuntu:/var/lib$ docker pull mysql
Using default tag: latest # 若不写tag,则下载默认最新版
latest: Pulling from library/mysql
a4b007099961: Downloading [===============================> ] 17.04MB/27.15MB
e2b610d88fd9: Download complete # 分层下载,docker image的核心,联合文件系统
38567843b438: Downloading [=======================================> ] 3.279MB/4.179MB
5fc423bf9558: Download complete
aa8241dfe828: Download complete
cc662311610e: Download complete
# 等价于
docker pull mysql
docker pull docker.io/libraru/mysql:latest
# 指定版本下载
docker pull mysql:5.7
删除镜像
# docker rmi # 删除镜像
docker rmi -f id # 删除指定的镜像
docker rmi -f id1,id2,id3 # 删除多个镜像
docker rmi -f $(docker images -aq) # 递归删除所有的镜像
容器命令
说明:有了镜像才能创建容器
运行容器
# docker run [可选参数] image
# 参数说明
--name='Name' # 容器名字
-d # 后台方式运行
-i -t # 使用交互运行,进入容器查看内容
-p # 指定容器端口
-p ip:主机端口:容器端口
-p 主机端口:容器端口 ***
-p 容器端口
-p # 随机端口
# 代码
sunshine@ubuntu:/var/lib$ docker run -it centos /bin/bash # 交互方式进入容器
[root@01e9e6a98a07 /]# ls # 查看容器内的centos
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
退出容器
[root@01e9e6a98a07 /]# exit # 容器直接停止并退出
Ctrl+P+Q # 容器不停止并退出
查看当前运行中的容器
# docker ps命令 [可选项]
-a # 列出正在运行的容器+历史运行过的容器
-n=? # 显示最近创建的容器
-q # 只显示容器的编号
sunshine@ubuntu:/var/lib$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
# 列出
sunshine@ubuntu:/var/lib$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
01e9e6a98a07 centos "/bin/bash" 3 minutes ago Exited (130) 2 minutes ago recursing_hamilton
删除容器
docker rm 容器id # 删除指定容器,不能删除正在运行的容器,想要强行删除,则docker rm -f 容器id
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容器
# docker run -d 镜像名
sunshine@ubuntu:~/Desktop$ docker run -d centos
12c5f68b87bf8a172375c5476d62857c449cfbb69c8fb3f1f764842140f1ccf0
# 问题:docker ps发现centos运行后停止
# 常见的坑:docker容器使用后台运行时,必须要一个前台进程,docker发现没有应用,就会自动停止
# nginx容器启动后,发现自己没有提供服务,就会自动停止
查看日志
# docker logs
# 先执行一段shell脚本
sunshine@ubuntu:~/Desktop$ docker run -d centos /bin/sh -c "while true;do echo sunshine;sleep 1;done"
# 查看容器
sunshine@ubuntu:~/Desktop$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4dd3ff416a29 centos "/bin/sh -c 'while t…" 1 second ago Up 1 second admiring_morse
# 查看日志
sunshine@ubuntu:~/Desktop$ docker logs -tf --tail 10 4dd3
2022-03-21T14:41:35.693737323Z sunshine
2022-03-21T14:41:36.696700801Z sunshine
2022-03-21T14:41:37.702567538Z sunshine
………………(一直在打印)
查看容器中的进程信息
# docker top
sunshine@ubuntu:~/Desktop$ docker top 573ae
UID PID PPID C STIME TTY TIME CMD
root 5849 5817 0 07:44 pts/0 00:00:00 /bin/bash
查看镜像元数据
# docker inspect
sunshine@ubuntu:~/Desktop$ docker inspect 573
[
{
"Id": "573ae211654ec00a861e93f736ee548a895b15d0d63726fed680ec3cdd1e7c6a",
"Created": "2022-03-21T14:44:08.910813485Z",
"Path": "/bin/bash",
"Args": [],
"State": {
……………………
进入当前正在运行的容器
# 容器通常是使用后台运行的,当需要进行配置时,需要进入容器
# docker exec -it 容器id /bin/bash
sunshine@ubuntu:~/Desktop$ docker exec -it 573a /bin/bash
[root@573ae211654e /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
# docker attach 容器id
sunshine@ubuntu:~/Desktop$ docker attach 573
[root@573ae211654e /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
# exec与attach区别
# exec:进入容器后开启一个新的终端,可以在里面操作
# attach:进入容器正在执行的终端,不会启动新的进程
从容器内拷贝文件到主机
# docker cp 容器id:容器内路径 目的主机路径
root@ubuntu:~# docker cp 0c402:/home/sunshine.txt /home
root@ubuntu:~# cd /home
root@ubuntu:/home# ls
sunshine sunshine.txt
查看容器资源占用
docker stats # 所有容器的 CPU/内存/网络 IO
docker stats 容器id # 指定容器
实战:docker部署nginx
# docker pull nginx # 安装nginx镜像
# docker run -d --name nginx_sms -p 8080:80 nginx # 启动nginx并映射8080端口
注意:
-p 8080:8080要求容器内应用也监听 8080,nginx 默认监听 80,所以端口映射写-p 8080:80,宿主机访问localhost:8080即可。
提交镜像
docker commit # 提交容器成为一个副本
# 命令和git类似
docker commit -m="描述信息" -a="作者" 容器id 目标镜像名:[TAG]
docker commit适合临时保存容器现场;规范化分发镜像应使用 Dockerfile 构建。
Loading...
