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...