Docker
Docker命令
启动Docker:systemctl start docker
查看启动状态: systemctl status docker
停止docker:systemctl stop docker
重启docker:system restart docker
开机启动docker: systemctl enable docker
镜像命令
查看镜像: docker images
删除镜像: docker rmi id 也可以通过名字+版本号删除
查看所有镜像的id : docker images -q
搜索镜像: docker search 镜像名称
拉取镜像: docker pull 镜像名称
容器命令
-i:保持程序一直运行 t:给容器分配一个终端 --name:表示给容器起一个名字 指定根据的镜像 进入容器的初始化指令 /bin/bash
通过-it创建的容器,退出后自动停止
创建容器: docker run -it --name=c1 指定的镜像 /bin/bash
查看当前正在运行的容器: docker ps
创建后台运行的容器:docker run -id --name:容器名 指定的镜像
查看所有正在运行和已经关闭的容器: docker ps -a
进入容器内部: docker exec -it 容器名 /bin/bash
退出容器: exit
启动容器:docker start 容器名
关闭容器: docker stop 容器名
删除容器:docker rm 容器id/容器名
查看容器信息:docker inspect 容器名
容器数据卷
-
数据卷是宿主机中的一个目录或文件
-
当容器目录和数据卷目录绑定后,对方修改会立即同步
-
一个数据卷可以被多个容器同时挂载
-
一个容器也可以被挂载多个数据卷
数据卷作用
-
容器数据持久化
-
外部机器和容器间接通信
-
容器之间数据交换
配置数据卷
-
创建启动容器时,使用-v参数 设置数据卷
目录和冒号之间不能有空格
docker run ... -v 宿主机目录(文件):容器内目录(文件) ...
注意
-
目录必须 是绝对路径
-
如果目录不存在,会自动创建
-
可以挂载多个数据卷
数据卷容器
多容器进行数据交换
-
多容器挂载同一个数据卷
-
数据卷容器
配置数据卷容器
MYSQL部署
-
搜索镜像 docker search mysql
-
拉取镜像 docker pull mysql:5.6
-
创建容器
-
操作容器中的mysql
-
容器内的网络服务和外部及其不能直接通信
-
外部机器和宿主机可以直接通信
-
宿主机和容器可以直接通信
-
当容器中的网络服务需要被外部机器访问时,可以将容器中提供服务的端口映射到宿主机的端口上,外部机器访问宿主机的该端口,从而间接访问容器的服务
-
这种操作称为端口映射
-p 后的第一个参数是暴漏给外部的端口,映射的是docker容器内的端口
进入容器内部:docker exec -it c_mysql /bin/bash
登录mysql:mysql -uroot -p123456
宿主机的data下保存的是数据卷
TomCat部署
-
搜索tomcat镜像:docker search tomcat
-
拉取tomcat镜像:docker pull tomcat
-
创建容器,设置端口映射\目录映射
# 在root目录下创建tocat目录用于存储tomcat数据信息 mkdir ~/tomcat cd ~/tomcat docker run -id --name=c_tomcat \ -p 8080:8080 \ -v $PWD:/usr/local/tomcat/webapps \ tomcat
参数说明
-p 8080:8080:将容器的8080端口映射到主机的8080端口
-v $PWD:/usr/local/tomcat/webapps \:将主机中当前目录挂载到容器的webapps
Nginx部署
-
搜索Nginx镜像
-
拉取Nginx镜像
-
创建容器
-
测试访问
mkdir ~/nginx cd ~/nginx mkdir conf cd conf
docker run -id --name=c_nginx \ -p 80:80 \ -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \ -v $PWD/logs:/var/log/nginx \ -v $PWD/html:/usr/share/nginx/html \ nginx
user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid events { worker_connections 1024; } http { include /etc/nginx/mine.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; include /etc/nginx/conf.d/*.conf; }
Redis部署
-
搜索redis镜像 docker seach redis
-
拉取redis镜像 docker pull redis:5.0
-
创建容器映射 docker run -id --name=c_redis -p 6379:6379 redis:5.0
-
使用外部机器连接
docker run --name=c_redis \ -p 6379:6379 \ -v /root/redis/conf/redis.conf:/etc/redis/redis.conf \ -d redis \ redis-server /etc/redis/redis.conf --appendonly yes
docker run -id --name=c_redis -p 6379:6379 -v /root/redis/conf/redis.conf:/etc/redis/conf/redis.conf -v /root/redis/data:/etc/redis/data redis:5.0 -d redis-server/redis.conf --appendonly yes
DockerFile
文件管理子系统
Linux由bootfs和rootfs两部分组成
bootfs:包含bootloader(引导加载程序)和kernel(内核)
rootfs:root文件系统,包含的就是典型的linux系统中的/dev,/proc,/bin,/etc等标准目录和文件
docker镜像是由特殊的文件系统叠加而成,
-
最低端是botfs,并使用宿主机的bootfs
-
第二层是root文件系统rootfs,称为base image
-
然后在往上可以叠加其他的镜像文件
-
统一文件系统,技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角,这样就隐藏了多层的存在,用户看来,只存在一个文件系统
-
一个镜像可以放在另一个镜像的上面,唯一下面的镜像称为父镜像,最底部的镜像称为基础镜像
-
当从一个镜像启动容器时,docker会在最顶层加载一个读写文件系统作为容器
docker制作镜像
-
容器转为镜像
docker commit 容器id 镜像名称:版本号
docker save -o 压缩文件名称 镜像名称:版本号
docker load -i 压缩文件名称
dockerfile是一个文本文件
包含了一条条指令
每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像
对于开发人员:可以为开发团队提供一个完全一致的开发环境
对于测试人员:可以直接拿开发时构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作
对于运维人员:在部署时,可以实现应用的无缝移植