linux docker 客户端操作数据卷
客户端操作
1.拉取其他主机上传镜像:
将本地nginx镜像删除
[root@docker ~]# docker rmi nginx
Untagged: nginx:latest
拉取上传的nginx镜像
[root@docker ~]# docker pull 192.168.100.101:5000/nginx
查询本地镜像
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
192.168.100.101:5000/nginx latest 2413ab964032 5 months ago 132.8 MB
由于镜像名字过程不方便使用,修改其名称
[root@docker ~]# docker tag 192.168.100.101:5000/nginx nginx
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
nginx latest 2413ab964032 5 months ago 132.8 MB
2.本地通过nginx镜像运行nginx对应的容器
[root@docker ~]# docker run -itd nginx /bin/bash
查询已运行容器
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
50a00c9e46a1 nginx:latest "/bin/bash" 14 seconds ago Up 13 seconds 80/tcp, 443/tcp jolly_cori
3.操作当前容易运行的系统: -i 交互式 -t 分配tty
[root@docker ~]# docker exec -it 50a0 ls
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
或者登录当前运行容器
[root@docker ~]# docker exec -it 50a0 /bin/bash
root@50a00c9e46a1:/# ls
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
root@50a00c9e46a1:/# cd tmp/
root@50a00c9e46a1:/tmp# ls
root@50a00c9e46a1:/tmp# touch aa.txt
root@50a00c9e46a1:/tmp# echo 1231 >> aa.txt
root@50a00c9e46a1:/tmp# ls
aa.txt
root@50a00c9e46a1:/tmp# exit
容器可以启动服务
--privileged
docker run --name test --privileged -dit base-centos7 /usr/sbin/init
随着服务启动而启动
[root@client ~]# docker run --name myhost -itd --restart=always centos:7.9 /bin/bash
下载一个mysql的镜像 并且运行成容器,通过宿主机ip可以访问mysql
[root@docker101 ~]# docker pull mysql:5.7
[root@docker101 ~]# docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=robin123 -d mysql:5.7
docker数据卷
docker数据卷是经过特殊设计的目录,可以绕过联合文件系统(ufs),为一个或者多个容器提供访问
数据卷设计的目的,在于数据的永久化,它完全独立与容器的生存周期,因此,docker不会在容器删除时删除其挂载的数据卷,也不会存在类似的垃圾收集机制,对容器引用的数据卷进行处理.
1.docker数据卷独立于docker的存在,与容器生存周期分离
2.docker数据卷存在于docker的宿主机文件系统中
3.docker数据卷可以是目录也可以是文件(如配置文件)
4.docker容器和利用数据卷和宿主机资源共享
5.同一个目录或者文件可以支持多个容器的访问,实现了容器间数据的共享和交换
数据卷的特点
1.数据卷在容器启动时初始化,如果容器使用的镜像在挂载点包含了数据,这些数据会拷贝到新初始化的数据卷中
2.数据卷可以在容器之间共享和重用
3.可以对数据卷里的内容直接进行修改
4.数据卷的变化不会影响镜像的更新
5.卷会一直存在,即使挂载数据卷的容器已经被删除
一.容器使用独立的数据
运行一个nginx容器
[root@docker ~]# docker run --name web1 -d -p 80:80 nginx
查询
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8cc57c5e984c nginx:latest "nginx -g 'daemon of About a minute ago Up About a minute 0.0.0.0:80->80/tcp, 443/tcp web1
描述web1容器的元数据信息
[root@docker ~]# docker inspect web1
登录web1容器
[root@docker ~]# docker exec -it web1 /bin/bash
root@8cc57c5e984c:/# cd /usr/share/nginx/html
root@8cc57c5e984c:/usr/share/nginx/html# ls
50x.html index.html
root@8cc57c5e984c:/usr/share/nginx/html# echo "web1 index" > index.html
root@8cc57c5e984c:/usr/share/nginx/html# cat index.html
web1 index
root@8cc57c5e984c:/usr/share/nginx/html#
二.容器使用系统的数据卷
方式一.指定数据卷映射(覆盖源镜像目录内容)
建立卷内容
[root@docker ~]# mkdir -p /web2/{html,logs}
[root@docker ~]# echo "web2" > /web2/html/index.html
[root@docker ~]# tree /web2
/web2
├── html
│ └── index.html
└── logs
将宿主机的卷共享给容器
[root@docker ~]# docker run --name web2 -d -p 81:80 -v /web2/html:/usr/share/nginx/html -v /web2/logs:/var/log/nginx nginx
容器内部查询
[root@docker ~]# docker exec -it web2 ls /usr/share/nginx/html
index.html
[root@docker ~]# docker exec -it web2 cat /usr/share/nginx/html/index.html
web2
宿主机查询
[root@docker ~]# ls /web2/logs/
access.log error.log
关闭所有容器
[root@docker ~]# docker ps -a | grep -v 'CONTAINER' |awk '{print $1}' |xargs docker rm -f
50d7933c408e
8cc57c5e984c
50a00c9e46a1
关闭某一个容器
[root@docker ~]# docker rm -f `docker ps -a -q`
8cc57c5e984c
方式二: 自动映射卷(不覆盖源镜像目录内容)
docker run --name myweb -d -v mydata:/usr/share/nginx/html nginx:1.25.3
数据存放位置:
/var/lib/docker/volumes/mydata/_data
查看卷信息
[root@myhost ~]# docker volume ls
数据卷容器 (没啥太大用,容器坏了,不能持久化数据)
实现容器之间共享数据
导入centos-6.4-docker.tar.bz2镜像
[root@docker ~]# docker load < /docker/docker-images/centos-6.4-docker.tar.bz2
[root@docker ~]# docker run -it -v /dbdata --name dbdata centos /bin/bash
[root@docker ~]# docker images
539c0211cd76 3.098309 years ago 313.8 MB
[root@docker ~]# docker tag 539c0211cd76 centos6
[root@docker ~]# docker images
centos6 latest 539c0211cd76 3.098311 years ago 313.8 MB
1.创建数据卷容器
[root@docker ~]# docker run -it -d -v /dbdata --name dbdata centos6 /bin/bash
bash-4.1# ls
bin dbdata etc lib media opt root selinux sys usr
boot dev home lib64 mnt proc sbin srv tmp var
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a8e8ca62ac4e centos6:latest "/bin/bash" 36 seconds ago Exited (0) 1 seconds ago dbdata
2.使用数据卷容器
[root@docker ~]# docker run -it -d --volumes-from dbdata --name web1 centos6 /bin/bash
bash-4.1# ls
bin dbdata etc lib media opt root selinux sys usr
boot dev home lib64 mnt proc sbin srv tmp var
[root@docker ~]# docker run -it -d --volumes-from dbdata --name web2 centos6 /bin/bash
bash-4.1# ls
bin dbdata etc lib media opt root selinux sys usr
boot dev home lib64 mnt proc sbin srv tmp var
bash-4.1# echo test > dbdata/index.html
bash-4.1# cat dbdata/index.html
test
可以有多个卷映射
可以映射配置文件
[root@localhost ~]# docker run --name web3 -v /mnt/default.conf:/etc/nginx/conf.d/default.conf -v /webroot:/usr/share/nginx/html -d nginx