docker基础命令
容器运行
命令格式:
docker run [OPTIONS] IMAGE [COMMAND] [ARG…]
范例:
# 当前已有镜像
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 605c77e624dd 19 months ago 141MB
debian latest 6f4986d78878 19 months ago 124MB
alpine latest c059bfaa849c 20 months ago 5.59MB
ubuntu latest ba6acccedd29 22 months ago 72.8MB
centos latest 5d0da3dc9764 23 months ago 231MB
nginx 1.18.0 c2c45d506085 2 years ago 133MB
nginx 1.8.1 0d493297b409 7 years ago 133MB
#运行容器且进入到容器
root@ubuntu-n1:~# docker run -it centos
[root@7631cf487fb9 /]#
或
root@ubuntu-n1:~# docker run -it centos bash
[root@1bf6e71e564e /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@1bf6e71e564e /]# cat /etc/redhat-release
CentOS Linux release 8.4.2105
#退出容器不注销 ctrl+p+q
显示容器运行状况
root@ubuntu-n1:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1bf6e71e564e centos "bash" 8 minutes ago Up 8 minutes gracious_johnson
#显示所有容器
root@ubuntu-n1:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1bf6e71e564e centos "bash" 9 minutes ago Up 9 minutes gracious_johnson
7631cf487fb9 centos "/bin/bash" 10 minutes ago Exited (0) 9 minutes ago upbeat_sanderson
随机映射端口
#前台启动并随机映射本 地端口到容器的 80
root@ubuntu-n1:~# docker run -P nginx:1.8.1
192.168.75.1 - - [08/Aug/2023:07:45:21 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.188" "-"
2023/08/08 07:45:21 [error] 7#0: *1 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 192.168.75.1, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "192.168.75.131:32769", referrer: "http://192.168.75.131:32769/"
192.168.75.1 - - [08/Aug/2023:07:45:21 +0000] "GET /favicon.ico HTTP/1.1" 404 570 "http://192.168.75.131:32769/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.188" "-"
192.168.75.1 - - [08/Aug/2023:07:45:47 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.188" "-"
192.168.75.1 - - [08/Aug/2023:07:45:48 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.188" "-"
#前台启动的会话窗口无法进行其他操作,除非退出,但是退出后容器也会退出
#随机端口映射,其实是默认从 32768 开始
root@ubuntu-n1:~# lsof -i:32769
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
docker-pr 4175 root 4u IPv6 201062 0t0 TCP *:32769 (LISTEN)
#网页访问本主机ip:32769即可
指定端口映射
-d 后端运行
方式 1:本地端口 8080映射到容器 80 端口:
docker run -d --name nginx-demo1 -p 8080:80 nginx:1.18.0
方式 2:本地 IP:本地端口:容器端口
docker run -d --name nginx-demo2 -p 192.168.75.131:8081:80 nginx:1.8.1
方式 3:本地 IP:本地随机端口:容器端口
docker run -d --name nginx-demo3 -p 192.168.75.131::80 nginx:1.8.1
方式 4:本机 ip:本地端口:容器端口/协议,默认为 tcp 协议
docker run -d --name nginx-demo4 -p 192.168.75.131:81:80/udp nginx:1.8.1
查看运行中的nginx日志
docker logs CONTAINER ID/NAME
#一次查看
docker logs -f CONTAINER ID/NAME
#持续查看
查看容器已经映射的端口
# docker port nginx-demo
80/tcp -> 0.0.0.0:8080
# docker port 72c1142f1884
80/udp -> 192.168.75.131:81
自定义启动容器的名称
–name
# docker run -itd --name httpd-test -p 9000:80 httpd
83edba1c6efb7b0076b3964fcb02b931c9f034061a8b9e391b77dc6334f0499f
root@ubuntu-n1:~# docker ps |grep httpd-test
83edba1c6efb httpd "httpd-foreground" 11 seconds ago Up 9 seconds 0.0.0.0:9000->80/tcp httpd-test
创建并进入容器
root@ubuntu-n1:~# docker run -it --name httpd-test1 httpd /bin/bash
root@4340b84f517f:/usr/local/apache2#
root@4340b84f517f:/usr/local/apache2# uname -r
4.15.0-213-generic
root@4340b84f517f:/usr/local/apache2# cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
root@4340b84f517f:/usr/local/apache2#
单次运行
–rm 容器退出后自动删除:docker run -it --rm --name httpd-test2 httpd /bin/bash
传递运行命令
容器需要有一个前台运行的进程才能保持容器的运行,通过传递运行参数是一种方式,另外也可以在构建镜像的时候指定容器启动时运行的前台命令。
docker run -d centos tail -f '/etc/hosts'
容器的启动和关闭
docker start id/name
docker stop id/name
进入容器
使用 attach命令
#使用方式为 docker attach 容器名,attach 类似于 vnc,操作会在各个容器界面显示,所有使用此方式进入容器的操作都是同步显示的且 exit 后容器将被关闭,且使用 exit 退出后容器关闭,不推荐使用,需要进入到有 shell 环境的容器,比如 centos 为例:
# docker run -it centos bash
[root@21a0d07f987a /]#
# docker attach 21a0d07f987a
[root@21a0d07f987a /]#
这里在任意一个终端打命令,这两个窗口命令是同步的。
使用 exec命令
docker exec -it nginx-demo bash
查看容器信息
docker inspect
.
# docker inspect nginx-demo -f "{{.NetworkSettings.IPAddress}}"
172.17.0.3
批量关闭正在运行的容器
docker stop $(docker ps -a -q)
批量强制关闭正在运行的容器
docker kill $(docker ps -a -q)
批量删除已退出容器
docker rm -f docker ps -aq -f status=exited
批量删除所有容器
docker rm -f $(docker ps -a -q)
指定容器 DNS
Dns 服务,默认采用宿主机的 dns 地址
一是将 dns 地址配置在宿主机
二是将参数配置在 docker 启动脚本里面 –-dns=1.1.1.1
root@ubuntu-n1:~# docker run -it --name test2 --dns 223.6.6.6 alpine
/ # cat /etc/resolv.conf
nameserver 223.6.6.6