赞
踩
docker run
- docker run [选项] [镜像名] [shell命令] [参数]
- #选项:
- -i, --interactive Keep STDIN open even if not attached,通常和-t一起使用
- -t, --tty 分配pseudo-TTY,通常和-i一起使用,注意对应的容器必须运行shell才支持进
- 入
- -d, --detach Run container in background and print container ID,台后运行,
- 默认前台
- --name string Assign a name to the container
- --h, --hostname string Container host name
- --rm Automatically remove the container when it exits
- -p, --publish list Publish a container's port(s) to the host
- -P, --publish-all Publish all exposed ports to random ports
- --dns list Set custom DNS servers
- --entrypoint string Overwrite the default ENTRYPOINT of the image
- --restart policy
- --privileged Give extended privileges to container
- -e, --env=[] Set environment variables
- --env-file=[] Read in a line delimited file of environment variables
- --sysctl net.ipv4.ip_unprivileged_port_start=0 #指定容器的内核参数,但不修改宿主机内核
- --ulimit ulimit #指定ulimit限制配置,比如: --ulimit nofile=10240:10240
- [shell命令] [参数] #使用指定的命令和参数,替换容器默认的命令
--restart可以指定不同的policy
如果docker stop 停止容器后重启宿主机。always选项以外的其它选项的容器都不会随着宿主机启动而自动启动
容器启动后,如果容器内没有前台运行的进程,将自动退出停止
容器需要一个前台运行的进程才能保持容器的进行,可以在构建镜像的时候指定容器启动时运行的前台命令,也可以通过启动时传递参数实现
容器里的PID为1的守护进程的实现方式
从容器内退出,并停止容器:exit
从容器内退出,并不停止容器:ctrl+p+q
指定容器名称:--name
运行交互式容器并退出:docker run -it docker.io/busybox sh
一次性运行容器,退出后立即删除,用于测试:docker run --rm alpine cat /etc/issue
--privileged 选项
容器里的root和宿主机的root不是一个东西。容器里的root是个假root,并不具备真正的root管理员权限,使用该参数,container内的root拥有真正的root权限。否则,container内的root只是外部的一个普通用户权限。privileged启动的容器,可以看到很多host上 的设备,并且可以执行mount。甚至允许你在docker容器中启动docker容器。
格式:
docker start|stop|restart|pause|unpause 容器ID
批量正常启动或关闭所有容器
- docker start $(docker ps -a -q)
- docker stop $(docker ps -a -q)
暂停和恢复容器
docker pause
docker unpause
- docker ps [OPTIONS]
- docker container ls [OPTIONS]
- 选项:
- -a, --all Show all containers (default shows just running)
- -q, --quiet Only display numeric IDs
- -s, --size Display total file sizes
- -f, --filter filter Filter output based on conditions provided
- -l, --latest Show the latest created container (includes all states)
- -n, --last int Show n last created containers (includes all states) (default -1)
- --format 按格式输出信息
docker ps
docker ps --format 命令中,你可以使用不同的占位符来指定要在输出中显示的容器信息。
- #以下是一些常用的占位符:
- {{.ID}}:容器的ID。
- {{.Image}}:容器使用的映像名称。
- {{.Command}}:容器的启动命令。
- {{.CreatedAt}}:容器的创建时间。
- {{.RunningFor}}:容器运行的时间。
- {{.Ports}}:容器的端口映射信息。
- {{.Status}}:容器的状态。
- {{.Size}}:容器的大小。
- {{.Names}}:容器的名称。
- {{.Label}}:容器的标签。
- #示例
- docker ps --format "{{.ID}}\t{{.Image}}\t{{.Status}}"
查看容器内的进程
docker top CONTAINER [ps OPTIONS]
查看容器资源使用情况
- docker stats [OPTIONS] [CONTAINER...]
- Display a live stream of container(s) resource usage statistics
- Options:
- -a, --all Show all containers (default shows just running)
- --format string Pretty-print images using a Go template
- --no-stream Disable streaming stats and only pull the first result
- --no-trunc Do not truncate output
查看容器的详细信息
docker inspect 可以查看docker各种对象的详细信息,包括镜像,容器,网络等
- docker inspect [OPTIONS] NAME|ID [NAME|ID...]
- Options:
- -f, --format string Format the output using the given Go template
- -s, --size Display total file sizes if the type is container
docker rm
- docker rm [OPTIONS] CONTAINER [CONTAINER...]
- docker container rm [OPTIONS] CONTAINER [CONTAINER...]
- #选项:
- -f, --force Force the removal of a running container (uses SIGKILL)
- -v, --volumes Remove the volumes associated with the container
- #删除停止的容器
- docker container prune [OPTIONS]
- Options:
- --filter filter Provide filter values (e.g. 'until=<timestamp>')
- -f, --force Do not prompt for confirmation
删除所有容器
- [root@ubuntu1804 ~]#docker rm -f `docker ps -a -q`
- [root@ubuntu1804 ~]#docker ps -a -q | xargs docker rm -f
删除指定状态的容器
- [root@ubuntu2204 ~]#docker rm -f `docker ps -q -f status=running`
- [root@ubuntu1804 ~]#docker rm `docker ps -qf status=exited`
docker kill 可以给容器发信号,默认为SIGKILL,即9信号
- docker kill [OPTIONS] CONTAINER [CONTAINER...]
- #选项:
- -s, --signal string Signal to send to the container (default "KILL")
attach
attach 类似于vnc,操作会在同一个容器的多个会话界面同步显示,所有使用此 方式进入容器的操作都是同步显示的,且使用exit退出后容器自动关闭,不推荐使用,
docker attach [OPTIONS] CONTAINER
exec
在运行中的容器启动新进程,可以执行单次命令,以及进入容器 测试环境使用此方式,使用exit退出,但容器还在运行,此为推荐方式
- docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
- 常用选项:
- -d, --detach Detached mode: run command in the background
- -e, --env list Set environment variables
- -i, --interactive Keep STDIN open even if not attached
- -t, --tty Allocate a pseudo-TTY
- #常见用法
- docker exec -it 容器ID sh|bash
docker run -P
- -P , --publish-all= true | false默认为false
- #示例:
- docker run -P docker.io/nginx #映射容器所有暴露端口至随机本地端口
docker port可以查看容器的端口映射关系
docker port CONTAINER [PRIVATE_PORT[/PROTO]]
自动生成iptables
[root@centos7 ~]#iptables -vnL -t nat
端口映射的本质就是利用NAT技术实现
docker logs可以查看容器中运行的进程在控制台的标准输出和标准错误,一般对应是日志信息
docker 日志是存放在宿主机的 /var/lib/docker/containers//-json.log文 件中
- docker logs [OPTIONS] CONTAINER
- 选项:
- --details Show extra details provided to logs
- -f, --follow Follow log output
- --since string Show logs since timestamp (e.g. 2013-01-02T13:23:37) or
- relative (e.g. 42m for 42 minutes)
- --tail string Number of lines to show from the end of the logs (default
- "all")
- -t, --timestamps Show timestamps
- --until string Show logs before a timestamp (e.g. 2013-01-02T13:23:37) or
- relative (e.g. 42m for 42 minutes)
- [root@kv1 docker]#docker run -d alpine /bin/sh -c 'i=1;while true;do echo hello$i;let i++;sleep 2;done'
- 2624b0bfb0bdf43293b0846e032ba719207b46a8fbbc74b0b0b9c97e2b4c7f02
- [root@kv1 docker]#docker logs 2624
- hello1
- hello2
- hello3
- hello4
- hello5
- hello6
- [root@kv1 docker]#docker logs --tail 4 2624
- hello10
- hello11
- hello12
- hello13
- #显示时间
- [root@kv1 docker]#docker logs --tail 1 -t 2624
- 2024-04-11T11:35:25.600679861Z hello42
- #查看磁盘文件
- [root@kv1 containers]#find ./ -name *.log |grep -r hello130
- find ./ -name *.log |xargs grep hello130
容器会自动将容器的ID加入自已的/etc/hosts文件中,并解析成容器的IP
- [root@kv1 docker]#docker exec -it cf678c96c896 sh
- / #
- / # cat /etc/hosts
- 127.0.0.1 localhost
- ::1 localhost ip6-localhost ip6-loopback
- fe00::0 ip6-localnet
- ff00::0 ip6-mcastprefix
- ff02::1 ip6-allnodes
- ff02::2 ip6-allrouters
- 172.17.0.4 cf678c96c896
-
- docker run -it --rm --add-host www.yaya.com:6.6.6.6 --add-host www.yaya.org:8.8.8.8 peaceful_chatterjee
指定DNS
容器的dns服务器,默认使用宿主机的dns服务
容器的DNS默认从宿主机的DNS获取
- 指定DNS地址
- [root@ubuntu1804 ~]#docker run -it --rm --dns 1.1.1.1 --dns 8.8.8.8 centos bash
-
- 指定domain名
- [root@ubuntu1804 ~]#docker run -it --rm --dns 1.1.1.1 --dns 8.8.8.8 --dns-search a.com --dns-search b.com busybox
-
- 配置文件
- [root@ubuntu1804 ~]#cat /etc/docker/daemon.json
- {
- "storage-driver": "overlay2",
- "registry-mirrors": ["https://si7y70hh.mirror.aliyuncs.com"],
- "dns" : [ "114.114.114.114", "119.29.29.29"],
- "dns-search": [ "magedu.com", "wang.org"]
- }
-
-
- #用--dns指定优先级更高
不论容器的状态是否运行,复制都可以实现
- docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
- docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
- Options:
- -a, --archive Archive mode (copy all uid/gid information)
- -L, --follow-link Always follow symbol link in SRC_PATH
复制容器的文件到宿主机
- [root@ubuntu2004 ~]#docker run -it --name b1 busybox sh
- [root@ubuntu2004 ~]#docker cp b1:/bin/busybox /usr/local/bin/
- [root@ubuntu2004 ~]#busybox ls
有些容器运行时,需要传递变量,可以使用 -e <参数> 或 --env-file <参数文件> 实现
docker run --name mysql-test1 -v /data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=wordpress -e MYSQL_USER=wpuser -e MYSQL_PASSWORD=123456 -d -p 3306:3306 mysql:5.7.30
- [root@ubuntu1804 ~]#docker system prune
- #清除不再使用的镜像
- [root@ubuntu1804 ~]#docker system prune -f -a
docker export
docker import
docker export和docker save都可以用于将 Docker 的容器/镜像导出到本地文件系统,但是它们 用途和效果是不同的: docker export:此命令是用于将一个运行的或者停止的容器的文件系统导出为一个 tar 归档文件。需 要注意的是, docker export不会包含该容器的历史(也就是每个层的变更),并且也不会包含容器 的环境变量、元数据和其他相关的配置信息。这意味着如果你导入一个用docker export导出的 tar 文件并运行,你得到的将是一个新的、干净的容器,没有之前容器的运行历史和配置。 docker save:此命令用于将一个或多个镜像导出为一个 tar 归档文件。与docker export不同, docker save会完整地保存镜像的所有内容,包括每一层的变更、所有的元数据、所有的标签等。这 意味着如果你导入一个用docker save导出的 tar 文件并运行,你得到的将是一个与原镜像完全一样 的新镜像,包括所有的历史和配置。 总结来说, docker export是用来导出容器的文件系统,而docker save是用来导出镜像的全部内 容。
- [root@ubuntu2204 ~]#docker export nginx -o nginx.tar
- [root@ubuntu2204 ~]#tar tvf nginx.tar |head
- -rwxr-xr-x 0/0 0 2022-07-06 17:45 .dockerenv
- drwxr-xr-x 0/0 0 2021-12-20 08:00 bin/
- -rwxr-xr-x 0/0 1234376 2021-08-05 04:25 bin/bash
- -rwxr-xr-x 0/0 43936 2020-09-24 16:36 bin/cat
- -rwxr-xr-x 0/0 72672 2020-09-24 16:36 bin/chgrp
- -rwxr-xr-x 0/0 64448 2020-09-24 16:36 bin/chmod
- -rwxr-xr-x 0/0 72672 2020-09-24 16:36 bin/chown
- -rwxr-xr-x 0/0 151168 2020-09-24 16:36 bin/cp
- -rwxr-xr-x 0/0 125560 2020-12-10 21:23 bin/dash
- -rwxr-xr-x 0/0 113664 2020-09-24 16:36 bin/date
- #import 实现将容器文件生成镜像
- [root@ubuntu2204 ~]#docker import nginx.tar nginx:test
- [root@ubuntu2204 ~]#docker images nginx:test
- REPOSITORY TAG IMAGE ID CREATED SIZE
- nginx test ca611fd77d08 6 minutes ago 140MB
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。