docker的使用
镜像概念
image,镜像是打包好的软件(程序代码、基础系统、依赖关系的软件包、系统库、工具),是Docker容器的源代码,Docker镜像用于创建容器。使用build命令创建镜像
仓库概念
集中存放镜像的地方,别人制作出来,上传上去的
基本命令
汇总
1、docker version #查看docker版本
2、docker images #查看你的docker里有那些镜像
dockers rmi #删除镜像
3、docker search nginx #查看nginx在hub里面的镜像
4、docker pull nginx #下载镜像,可以指定版本
docker pull docker.io/library/nginx:1.17
5、docker ps#查看启动的docker容器
6、docker network inspect bridge #查看bridge桥接网络的详细信息
7、docer network ls
查看本机docker里的网络类型
8、docker run
去创建容器,然后去启动容器,相当于:dockers run=dockers create+docker start
9、docker stop
停止
10、docker start
启动
11、docker rm
删除容器
12、docker exec -it sc_nginx2 /bin/bash
--interactive , -i
交互式方式进入容器
--tty , -t
开启一个终端
sc_nginx2
容器名字
/bin/bash
进入容器执行的程序
exit
退出容器
13、docker container inspect sc_mysql1
查看容器的详细信息
14、docker service create
创建docker服务
15、 docker node ls
16、docker logs
查看容器启动的过程中的日志
排错使用
容器
运行镜像的地方,背后就是起到一个进程来运行这个镜像,包括应用程序及其所有依赖项,作为操作系统的独立进程运行
容器与宿主机的关系:
容器的状态
up created exited
创建一个容器
docker run -it --name ubuntu-1 -d ubuntu
进入容器
docker exec -it ubuntu-1 /bin/bash
注意1
连接不到容器,先关闭防火墙,在重启一下docker,防止挂起状态,在重启服务,(重启docker会到iptables里面添加相关规则)
如何导出镜像,导入镜像?
1、导出镜像 o 导出成tar文件
docker save -o 1-ubuntu.tar ubuntu
传递到另外一台服务器上
scp 1-ubuntu.tar root@192.168.0.17:/root
#scp传递到另外一台服务器上
#传送到192XXX这台主机里面的/root路径下
在另外一台服务器上导入镜像
docker load -i 1-ubuntu.tar
还有另外一个导出方式(动态的:正在运行的容器,容器若修改了内容,导入的也会修改)导出正在运行的容器里的文件系统成一个归档文件动态的(Export a container’s filesystem as a tar archive)
docker export -o my_nginx.tar my_nginx
导入:
docker import sc-ubuntu2.tar sc-ubuntu:2.0
#为导入的的镜像起一个REPOSITORY和tag,否则默认是none
导出镜像:
静态:存放的镜像: docker save —》docker load(导入)
动态:运行在容器里的镜像:docker export --》docker import(导入)
删除镜像
docker rmi
注意2
下载linux系统镜像创建的容器可能无法运行,需要加一个it
docker run -it -d --name luojiajun centos:7 /bin/bash
# -p 做端口映射的时候,其实背后就是在iptables里添加DNAT和SNAT策略(不接虽然没太大关系,可以 ping别人,但是别人无法访问)
容器上不了网的问题的解决方法:
1、开启路由功能
临时开启:
echo 1 >/proc/sys/net/ipv4/ip_forward
2、 重启docker
service docker restart
永久:
[root@docker ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
#加上一条语句
#查看是否修改成功 ,1为开启,0为关闭
[root@docker ~]# sysctl -p
net.ipv4.ip_forward = 1
控制一个容器的内存资源和cpu
docker run -it --cpu-shares 30 -m 100000000 -d --name centos1 centos:7
# --cpu-shares 限制cpu
# -m限制内存100M byte为单位
#其他的具体参数请使用 docker run help查看
cpu的计算资源(不管你有多少个核心,都是看做一个整体来计算): 1 -----------》分成1000份 --》分30份
如何限制一个进程可以使用多少cpu和多少内存?
创建一个容器,让这个进程在容器里run,这样可以限制容器所使用的cpu和内存,从而可以达到限制这个进程的cpu和内存的使用。
容器的数据持久化-共享化volumevolumes 数据卷
概念
容器的数据保存问题-数据持久化 data persistence
容器背后是一个个的进程,进程在内存运行,所以我们设计到一个问题数据持久化
volumes 数据卷 --》存放数据的地方
Mount 挂载,映射,绑定,map
图解:
宿主机:安装了docker的主机
数据卷作用
实现容器和宿主机之间共享数据的
方便备份恢复
一台机器上的容器和宿主机之间的数据共享
如果是多台机器,背后需要使用nfs、NAS、SAN、云存储等网络存储解决
创建数据卷
docker volume create my_volume
查看数据卷
docker volume ls
查看卷的路径
docker volume inspect my_volume
注意
inspect 是一个查看详细信息的命令,不仅仅可以查看volume的详细路径,还可以查看容器的详细信息,比如说容器的ip
使用卷: 容器去使用卷
使用三种不同的语法去使卷
1、 --mount
docker run -d \
--name nginx-1 \
--mount source=my_volume,target=/usr/share/nginx/html \
-p 7790:80 \
nginx:latest
2、-v
docker run -d --name nginx-2 --mount -v source=my_volume,target=/usr/share/nginx/html -p 7790:80 nginx:latest
3、-v使用路径
docker run -d \
--name xuzz-3 \
-v my_volume:/usr/share/nginx/html \
nginx:latest
问题
1、正常运行的容器,数据会丢失吗?
不会,会保存 到/var/lib/docker/volumes/(volume默认的位置)
2.如何将容器里的数据保存到宿主机?
3.如何在容器和宿主机之间传输数据?
4、docker容器运行后是否可以挂载数据卷?不可以
数据卷的挂载是在启动容器的时候完成
你可以进入容器内容去修改数据
5、修改了容器对应的配置文件如何让配置文件生效?
重启容器 docker restart 容器名
[root@docker conf.d]# pwd
/mysql2/conf.d
[root@docker conf.d]# cat mysql.cnf
[mysql]
auto-rehash
prompt=\u@\d \R:\m mysqlsc>
[mysqld]
port = 3306
open_files_limit = 8192
innodb_buffer_pool_size = 128M
[root@docker conf.d]#