前提说明
本文章是基于Linux centos系统的,如果你是window,可以:
1 买一个阿里云ecs
2 用virtualBox在你的电脑上装一个linux系统
强烈建议买一个ecs,可以少走很多弯路,docker搭配linux简直是神器~~相见恨晚啊
docker基础
- docker架构
- client即用户,通过命令行发布命令
- daemon,守护进程,在安装完docker后,就会产生
- image和container的关系就像面向对象中类和对象的关系,其中,image对应类,container对应对象,用户可以从仓库registries中拉取镜像,创建自己的容器.
- 最后,registries又分为官方的和私有
- 服务相关命令
- systemctl start docker 开启
- systemctl stop docker
- systemctl restart docker
- systemctl status docker 查看docker的状态
- systemctl enable docker 允许开机自启动
绿色就代表启动成功
- 镜像(image)相关命令
所谓镜像,就是一个涵盖了运行服务所需要的软件以及运行环境
- docker images --查看现有的镜像
- docker search xxx --搜索镜像
- docker pull redis:版本 (若不跟版本号,默认最新版本)
再次输入docker images:
- docker rmi imageId
输入docker images查看imageId
输入:
法二 :docker rmi 名称+版本号
docker rmi redis:5.0
- 容器相关命令
容器是由镜像创建出来的实例,那么关注点就在如何创建
- 创建容器
docker -it --name=xxx 镜像:版本 /bin/bash
此时的终端已经不再是linux操作终端,而是进入了软件的操作终端
- 退出
exit
- 查看容器状态
docker ps
docker ps -a (查看存在以及已经退出的容器)
- 创建容器第二种方法
第一种方法创建容器,在exit后就会自动关闭,现在只想让其运行,不想进入终端
docker run -id --name=c1 镜像:版本
此时就不会再进入终端,而是再后台运行
- 查看容器状态后进入容器
此时就算再通过exit退出容器,容器也不会关闭
- 启动停止容器
- 删除容器
查看某一特定容器信息
docker inspect xxx
利用docker部署Mysql
- 搜索,拉取镜像
docker search mysql
docker pull mysql:8.0
二创建容器
现在根目录下创建mysql目录
mkdir /my/mysql/{conf,data,logs}
创建容器以及相关配置
docker run \
--name mysql \
-p 3306:3306 \
-v /my/mysql/conf:/etc/mysql/mysql.conf.d \
-v /my/mysql/data:/var/lib/mysql \
-v /my/mysql/logs:/logs \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:8.0 \
--character-set-server=utf8 --collation-server=utf8_unicode_ci
mysql:8.0
参数说明:
- 登录Msyql
docker exec -it mysql env LANG=C.UTF-8 /bin/bash
mysql -uroot -p123456
这样就进入了熟悉的Mysql页面
- 从本地用工具连接docker里的Mysql
注意这个时候连的是3307端口(上面创建容器时映射的端口号)!!!不是3306
利用docker部署tomcat,nginx
- tomcat
- 拉取镜像,创建重启并配置
docker pull tomcat
mkdir ~/tomcat
cd ~/tomcat
docker run -id --name=c_tomcat \
-p 8080:8080\
-v ~/tomcat:/user/local/tomcat/webapps \
tomcat
- nginx
- 先创建目录nginx.以及子目录conf/nginx.conf
mkdir /nginx
cd /nginx
mkdir /conf
cd /conf
vim nginx.conf
- 复制代码到nginx.conf,按ESC+:wq保存
user root;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.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;
}
- 创建容器,映射目录以及端口
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
docker镜像原理
docker镜像原理
linux操作系统
二docker镜像原理
可以这样理解,现在要拉取tomcat镜像,而tomcat依赖于jdk,所以连jdk一并拉取,但是用户看到的是一个整体,只知道拉取了tomcat镜像.像这样一层一层贴加,好处就是能让之前已经下载过的镜像,被后来下载的镜像重复使用
三docker制作镜像
- 容器转镜像
制作镜像:
docker commit 容器Id 镜像名:版本
压缩镜像:
docker save -o 文件名 镜像版本
还原文件为镜像:
dockerFile
概念
案例一:自定义centos镜像
centos 镜像创建的容器无法使用vim,默认的根目录是
需求:
1 默认登录路径为/user
2 可以使用vim
- 创建centos_dockerfile文件,编写镜像
FROM centos:7
MAINTAINER hzh
RUN yum install -y vim
WORKDIR /user
cmd /bin/bash
- build命令创建镜像
注意最后还有一个点
docker build -f ./centos-dockerfile -t hzh_centos:1 .
- 效果:
案例二:创建springboot项目
- 创建springboot测试项目
- 点击package进行打包
- 上传jar到服务器
- 编写dockerFile
- build命令
- 端口映射
访问ip+9000:test即可