镜像相关命令
root@vvkt7whznuckhiz2-0723575:~# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEnginx latest 08b152afcfae 5 days ago 133MBhello-world latest d1165f221234 4 months ago 13.3kB
Command-Line
docker pull redis:6 # 拉取指定标签docker rmi redis:5 # 删除指定镜像docker rmi 08b152afcfae # 通过镜像ID删除镜像
参数介绍
REPOSITORY: 镜像在仓库中的名称,简称镜像名称
TAG: 镜像标签
IMAGE ID: 镜像ID
CREATED: 镜像创建日期(不是获取该镜像的日期)
SIZE: 镜像大小
这些镜像都存储在Docker宿主机的`/var/lib/docker`目录下
如果需要从网络中查找镜像,可以通过以下命令搜索
docker search 镜像名称
NAME : 镜像名字
DESCRIPTION: 版本描述
STARS: 关注度
OFFICIAL:是否为官方镜像
docker pull redis:6 # 拉取指定标签
### 查看正在运行的容器root@vvkt7whznuckhiz2-0723575:~# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES### 查看特定命令的帮助root@vvkt7whznuckhiz2-0723575:~# docker ps --helpUsage: docker ps [OPTIONS]List containersOptions:-a, --all Show all containers (default shows just running)-f, --filter filter Filter output based on conditions provided--format string Pretty-print containers using a Go template-n, --last int Show n last created containers (includes all states) (default -1)-l, --latest Show the latest created container (includes all states)--no-trunc Don't truncate output-q, --quiet Only display container IDs-s, --size Display total file sizes### 查看所有容器root@vvkt7whznuckhiz2-0723575:~# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES8238375a0c06 hello-world "/hello" 11 hours ago Exited (0) 11 hours ago musing_chandrasekhard13713d9d85e hello-world "/hello" 3 days ago Exited (0) 3 days ago keen_ellis
root@vvkt7whznuckhiz2-0723575:~# docker ps -f status=exitedCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES8238375a0c06 hello-world "/hello" 11 hours ago Exited (0) 11 hours ago musing_chandrasekhard13713d9d85e hello-world "/hello" 3 days ago Exited (0) 3 days ago keen_ellis
root@vvkt7whznuckhiz2-0723575:~# docker ps -lCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES8238375a0c06 hello-world "/hello" 11 hours ago Exited (0) 11 hours ago musing_chandrasekhar
docker ps -n 5root@vvkt7whznuckhiz2-0723575:~# docker ps -n 5CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES8238375a0c06 hello-world "/hello" 11 hours ago Exited (0) 11 hours ago musing_chandrasekhard13713d9d85e hello-world "/hello" 3 days ago Exited (0) 3 days ago keen_ellis
2.2 创建与启动容器
docker run --name mynginx -p 3389:80 nginx # 前一个参数是映射端口号,后一个参数是容器内部端口号docker run --name mynginx -P nginx # 随机端口号### 另开终端查看端口号root@vvkt7whznuckhiz2-0723575:~# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESf83761dec854 nginx "/docker-entrypoint.…" 4 minutes ago Up 3 minutes 0.0.0.0:49153->80/tcp, :::49153->80/tcp mynginx### 删除容器root@vvkt7whznuckhiz2-0723575:~# docker rm mynginxmynginx### 使用ID删除容器root@vvkt7whznuckhiz2-0723575:~# docker rm 1000057ad9b11000057ad9b1
-i :表示运行容器-t :表示容器启动后会进入命令行,加入这两个参数之后,容器创建就能登录进去,即分配一个伪终端–name :为创建的容器命名-v :表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或者文件映射注意L最好做目录映射,在宿主机上做修改,然后共享到容器上;
-d :则会创建一个守护式容器在后台运行(这样创建容器不会自动登录容器,如果只加-i -t两个参数,创建容器则会自动进入容器)-p :表示端口映射,前者是宿主机端口,后者是容器内的映射端口,可以使用多个-p做多个端口映射-P :构建随机端口映射
运行效果
2.3 守护方式创建容器
root@vvkt7whznuckhiz2-0723575:~# docker run -di --name mynginx -p 3389:80 nginx0964fdf13ec3f8ced15ba3a177fd2b303391bf46341a43750e6c2bb70b96969a
补充
命令行终端实际以软件形式运行,可以直接进入相应目录,/bin/bash 或者/bin/sh【exit】退出
### 进入容器内部文件root@vvkt7whznuckhiz2-0723575:~# docker exec -it mynginx /bin/bashroot@0964fdf13ec3:/# lsbin dev docker-entrypoint.sh home lib64 mnt proc run srv tmp varboot docker-entrypoint.d etc lib media opt root sbin sys usr
查看Docker配置文件:cat /etc/nginx/conf.d/default.conf
server {listen 80;listen [::]:80;server_name localhost;#access_log /var/log/nginx/host.access.log main;location / {root /usr/share/nginx/html;index index.html index.htm;}#error_page 404 /404.html;# redirect server error pages to the static page /50x.html#error_page 500 502 503 504 /50x.html;location = /50x.html {root /usr/share/nginx/html;}# proxy the PHP scripts to Apache listening on 127.0.0.1:80##location ~ \.php$ {# proxy_pass http://127.0.0.1;#}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000##location ~ \.php$ {# root html;# fastcgi_pass 127.0.0.1:9000;# fastcgi_index index.php;# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;# include fastcgi_params;#}# deny access to .htaccess files, if Apache's document root# concurs with nginx's one##location ~ /\.ht {# deny all;#}}
2.3 停止与启动容器
### 停止容器docker stop 容器名称 | 容器ID### 启动容器docker start 容器名称 | 容器ID
2.4 文件拷贝
如果我们需要将文件拷贝到容器内部可以使用cp命令
docker cp 需要拷贝的文件或目录 容器名称:容器目录docker cp test.txt mynginx:/etc
也可以将文件从容器内拷贝出来
docker cp 容器名称:容器目录 需要拷贝的文件或者目录docker cp mynginx:/etc/abc.txt /root
其他操作
### 运行并且进入容器内目录docker exec -it mynginx /bin/bash### 查看文件root@0964fdf13ec3:/etc# cat test.txtTest the function of copying files.
2.5 目录挂载(容器数据卷操作)
我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器,而且这个操作是双向绑定的,也就是说容器内的操作也会影响到宿主机,实现备份功能。
但是容器被删除的时候,宿主机内容并不会被删除。如果多个容器挂载在同一个目录,其中一个容器被删除,其他容器的内容也不会受到影响。
容器和宿主机之间数据卷属于引用关系,数据卷是从外界挂载到容器内部的,所以可以脱离容器的生命周期而独立存在,而正式由于数据卷的生命周期并不等同于容器的生命周期,在容器退出或者删除之后,数据卷仍然不会受到影响,数据卷的生命周期会一直持续到没有容器使用它为止。
创建容器添加-v参数,格式为:宿主机目录:容器目录, 例如:
docker run -di -v /mydata/docker_centos/data:/usr/local/data --name centos7-01 centos:7# 多目录挂载docker run -di -v /宿主机目录:/容器目录 -v /宿主机目录2:/容器目录2:镜像名
目录挂载操作可能会出现权限不足的提示,这是因为CentOS7的安全模块SELinux把权限禁止掉了,在docker run时通过
--privileged=true给该容器加权限来解决挂载的目录没有权限的问题操作思路:1. 创建容器即绑定目录挂载关系;2. 修改配置文件中的[Mount];3. 拷贝出来文件,重新创建并且挂载
常用命令
### 查看docker配置信息docker inspect niginx03### 创建容器时则绑定文件目录docker run -di --name nginx03 -p 3389:80 -v /mydata/docker_nginx/:/abc/123 nginx### 补充 tree命令tree -L 1### 进入容器内操作文件docker exec -it mynginx /bin/bash
指定目录挂载
### 主机2 创建目录并且进入mkdir /mydata/docker_nginxcd /mydata/docker_nginxvim test.txt(我是配置文件)### 主机1 创建容器并且指定目录docker run -di --name nginx02 -p 3389:80 -v /mydata/docker_nignx/:/abc/123 nginx### 主机1 进入系统指定目录cd /mydata/docker_nginx### 主机2 进入容器nginx02docker exec -it nginx02 /bin/bash### 主机2 查看相关文件cd /abc/123ls
2.5.1匿名挂载
匿名挂载只需要写容器目录即可,容器外对应的目录会在/var/lib/docker /volumes中生成。
# 匿名挂载docker run -di -v /usr/local/data --name centos7 centos:7# 查看volume数据卷信息docker volume ls
实操代码
1. docker run -di -v /usr/local/data --name nginx05 nginx2. ls /var/lib/docker/volumes/ # 存放镜像文件的目录# 预期结果dab8a70d6214a5ea4d7fbf74efd20d5de5e08b853ef7b3237aba23d823ce8a2ametadata.db# 补充---查看文件创建时间# stat file / stat *
2.5.2 具名挂载
具名挂载就是给数据卷起了个名字,容器外对应的目录会在/var/lib/docker/volume 中生成。
#匿名挂载docker run -di -v docker_centos_data:/usr/local/data --name centos7-03 centos:7#查看volume数据卷信息docker volume ls#主机1 实操代码docker run -di -v docker_nginx_data:/usr/local/contain --name nginx01 nginx#主机1 进入指定目录,查看docker内部文件cd /var/docker/volumeslsdocker_nginx_datacd docker_nginx_data/_data/#主机2docker exec -it nginx01 /bin/bashcd /usr/local/containlstouch mix.txt#主机1 检查文件同步lsmix.txt

2.5.4 查看目录挂载关系
docker inspect nginx01 | grep Mounts -A 20### 预期输出结果"Mounts": [{"Type": "volume","Name": "docker_nginx_data","Source": "/var/lib/docker/volumes/docker_nginx_data/_data","Destination": "/usr/local/contain","Driver": "local","Mode": "z","RW": true,"Propagation": ""}],"Config": {"Hostname": "2ca5b2ae89ae","Domainname": "","User": "","AttachStdin": false,"AttachStdout": false,"AttachStderr": false,"ExposedPorts": {"80/tcp": {}# 方法2root@vvkt7whznuckhiz2-0723575:/nydata/docker_nginx# docker run -di -v docker_nginx_data:/usr/local/contain --name nginx01 nginxe8acc16c9d9195ae05a9414a5ba1a61f9b4220a082daa341a528eef3decf7ebaroot@vvkt7whznuckhiz2-0723575:/nydata/docker_nginx# docker volume inspect docker_nginx_data[{"CreatedAt": "2021-08-07T16:33:32+08:00","Driver": "local","Labels": null,"Mountpoint": "/var/lib/docker/volumes/docker_nginx_data/_data","Name": "docker_nginx_data","Options": null,"Scope": "local"}]
2.5.5 设置目录/文件权限(只读/只写)
#主机1 创建容器root@vvkt7whznuckhiz2-0723575:~# docker run -di --name nginx02 -P -v /nydata/docker_nginx:/abc:ro nginx2a793b9c67c9e6bac7fe56ff602ca91783289b0b6e2dbda78cbd224bff661a7eroot@vvkt7whznuckhiz2-0723575:~# cd /mydata/docker_nginx/root@vvkt7whznuckhiz2-0723575:/mydata/docker_nginx# lstest.txt# 主机2 查看文件root@vvkt7whznuckhiz2-0723575:~# docker exec -it nginx02 /bin/bashroot@2a793b9c67c9:/# cd /abc/root@2a793b9c67c9:/abc# lsroot@2a793b9c67c9:/abc# touch 123.txttouch: cannot touch '123.txt': Read-only file system
2.5.6 读写模式
# 主机1root@vvkt7whznuckhiz2-0723575:~# docker run -di --name nginx03 -P -v /nydata/docker_nginx:/tecent:rw nginxd0362b1efe39508a3d2c997789ef185aacdbce3cdb10e6bf29e36bbe94ed7200root@vvkt7whznuckhiz2-0723575:~# cd /nydata/docker_nginxroot@vvkt7whznuckhiz2-0723575:/nydata/docker_nginx# ls599.txt# 主机2root@vvkt7whznuckhiz2-0723575:~# docker exec -it nginx03 /bin/bashroot@d0362b1efe39:/# cd tecentroot@d0362b1efe39:/tecent# ls599.txtroot@d0362b1efe39:/tecent# touch 1024.textroot@d0362b1efe39:/tecent# ls1024.text 599.txt# 主机1root@vvkt7whznuckhiz2-0723575:/nydata/docker_nginx# ls1024.text 599.txt
2.5.7 继承挂载[volumes-from]
# 主机1root@vvkt7whznuckhiz2-0723575:/nydata/docker_nginx# docker run -di --name nginx04 --volumes-from nginx03:ro nginx# 主机2root@vvkt7whznuckhiz2-0723575:~# docker exec -it nginx04 /bin/bashroot@352eea7b736c:/# cd /tecentroot@352eea7b736c:/tecent# ls1024.text 599.txtroot@352eea7b736c:/tecent# touch 1998.txttouch: cannot touch '1998.txt': Read-only file system
2.5.8 查看容器IP地址
我们可以通过以下命令查看容器的元信息。
- docker inspect 容器名称|容器ID
也可以直接执行下面的命令直接输出IP地址。- docker inspect —format=’ {{ .NetworkSettings.IPAddress}} ‘ 容器名称|容器ID
# docker inspect nginx03# 预期输出结果"Gateway": "172.17.0.1","GlobalIPv6Address": "","GlobalIPv6PrefixLen": 0,"IPAddress": "172.17.0.2","IPPrefixLen": 16,"IPv6Gateway": "","MacAddress": "02:42:ac:11:00:02","Networks": {"bridge": {"IPAMConfig": null,"Links": null,"Aliases": null,"NetworkID": "899b1a3fb8da357f7a3b4d4115911a9467fabf7e9a540232ec39870104cc1c19","EndpointID": "6cd23b40384f85d9c99d2dd0505c5a0826302edb8a404dfd3d5b6b3b718a6a8a","Gateway": "172.17.0.1","IPAddress": "172.17.0.2","IPPrefixLen": 16,"IPv6Gateway": "","GlobalIPv6Address": "","GlobalIPv6PrefixLen": 0,"MacAddress": "02:42:ac:11:00:02","DriverOpts": null# docker inspect --format=' {{ .NetworkSettings.IPAddress}} ' nginx03root@vvkt7whznuckhiz2-0723575:~# docker inspect --format=' {{ .NetworkSettings.IPAddress}} ' nginx03172.17.0.2
2.5.9 同时停止和删除多个容器
docker stop nginx03 nginx04 nginx05 nginx06 nginx07 nginx08 nginx09docker rm nginx03 nginx04 nginx05 nginx06 nginx07 nginx08 nginx09
