1.docker 安装
使用人员可以根据官网进行window、mac、linux的相关安装。这里使用的是相关的命令安装(比较方便)。系统为CenOS 7 * 64。
安装命令为:
- yum 包更新到最新
- yum update
- 安装需要的软件包,yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
- yum install -y yum-utils device-mapper-persistent-data lvm2
- 设置yum源
- yum-config-manager --add-repo download.docker.com/linux/cento…
- 安装docker,出现输入的界面都按y
- yum install -y docker-ce
- 查看docker的版本,验证是否验证成功
- docker -v
2.docker 理解
3.docker 镜像加速配置
国内配置的源有很多,如下:
我们这里选择阿里云的,具体的命令如下:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{ "registry-mirrors": ["https://你的加速地址.mirror.aliyuncs.com"] } EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
注意:这里的加速地址每个人员都是不一样的,需要自己注册阿里云后,在镜像服务里面获取。
4.docker 命令
docker的命令分为三种:服务命令、镜像命令、容器命令。
4.1服务命令
- 服务启动
- systemctl start docker(类似启动window中的服务,这里启动docker,我们就可以使用docker了)
- 停止服务
- systemctl stop docker
- 重启服务
- systemctl restart docker
- 查看服务状态
- systemctl status docker
- 设置服务开机启动
- systemctl enable docker
4.2镜像命令
- 查看镜像:查看本地所有的镜像
- docker images
- docker images -q 查看所有的镜像id
- 搜索镜像:从网络中查找需要的镜像
- docker search 镜像名称(如:redis)
- 拉取镜像:从docker的仓库下载镜像到本地,镜像名称格式为:名称:版本号。如果版本号不指定,则是使用最新的版本。如果不知道镜像版本,则可以去docker hub搜索对应的镜像查看。
- docker pull 镜像名称
- 删除镜像:删除本地镜像
- docker rmi 镜像id # 删除指定本地的镜像
- docker rmi 'docker images -q' # 删除所有本地的镜像
4.3容器命令
- 查看容器
- docker ps # 查看正在运行的容器
- docker ps -a # 查看所有容器
- 创建并启动容器
- docker run 参数 (docker run -it --name=a1 镜像名称:TAG 命令(/bin/bash),样例:docker run -it --name=a1 centos:7 /bin/bash)
- 参数说明:
- -i:保持容器的运行。通常与-t同时使用。加入it这两个参数后,容器创建后,自动进入容器中,退出容器后,容器自动关闭。
- -t:为容器重新分配一个输入终端。通常与-i同时使用。
- -d:以守护(后台)模式运行容器。创建一个容器后,在后台运行。需要使用docker exec进入容器。退出后,容器不会关闭。
- -it:创建的容器一般称为交互模式容器;-id:创建的容器一般称为守护石容器。
- --name:为创建容器的名称。
- 退出容器
- exit
- 进入容器
- docker exec 参数 # 退出容器,容器不会关闭。(样例:docker exec -it a1 /bin/bash)
- 停止容器
- docker stop 容器名称
- 启动容器
- docker start 容器名称
- 删除容器:如果容器正在运行,则删除失败。需要停止容器才能删除。
- docker rm 容器名称
- 查看容器信息
- docker inspect 容器名称
5.数据卷
- 数据卷是宿主机中的一个目录或者文件
- 当容器目录和数据卷目录绑定后,对方的修改会立即同步
- 一个数据卷可以被多个容器同时挂载
- 一个容器也可以被挂载多个数据卷
5.1配置数据卷
- 创建启动容器时,使用-v参数设置数据卷
- docker run ... -v s宿主机目录(文件):容器内目录(文件)...
- 注意事项:
- 目录必须是绝对路径
- 如果目录不存在,则会自动创建
- 可以挂载多个数据卷
- 样例:
- docker run -it --name=c1 -v /root/data:/root/data_container centos:latest /bin/bash
5.2配置数据卷容器
- 多容器进行数据交换:
- 多个容器挂载同一个数据卷
- 数据卷容器
- 创建启动一个数据卷容器,使用-v参数设置:
- docker run -it --name=c3 -v /volume centos:latest /bin/bash
- 创建启动其他两个容器,使用--volumes-from参数设置挂载数据卷容器:
- docker run -it --name=c1 --volumes-from c3 centos:latest /bin/bash
- docker run -it --name=c2 --volumes-from c3 centos:latest /bin/bash
5.3其他
- 通过命令docker inspect c3可以查看具体的设置信息:
6.应用部署
主要部署几个应用:mySql、tomcat、nginx、redis。应用部署的原理图:
端口映射
6.1mySql
-
搜索mysql镜像
- docker search mysql
-
拉取mysql镜像
- docker pull search:5.6
-
创建容器,设置端口映射、目录映射
- 在/root目录下创建mysql目录用于存储musql数据信息
- mkdir ~/mysql
- cd ~/mysql
- 配置命令
- docker run -id -p 3306:3306 --name=c_mysql -v PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6
- 参数说明:
- -p 3306:3306: 将容器的3306端口映射到宿主机的3306端口。
- -v $PWD/conf:/etc/mysql/conf.d:将主机当前目录下的conf/my.cnf挂载到容器的/etc/mysql/my.cnf配置目录。
- -v $PWD/logs:/logs:将主机的当前目录下的logs目录挂载到容器的/logs日志目录。
- -v $PWD/data:/var/lib/mysql:将主机当前目录下的data目录挂载到容器的/var/lib/mysql数据目录。
- -e MYSQL_ROOT_PASSWORD=123456:初始化root的用户密码。
- 在/root目录下创建mysql目录用于存储musql数据信息
6.2Tomcat
-
搜索tomcat镜像
- docker search tomcat
-
拉取tomcat镜像
- docker pull tomcat
-
创建容器,设置端口映射、目录映射
- 在/root目录下创建tomcat目录用于存储tomcat数据信息
- mkdir ~/tomcat
- cd ~/tomcat
- 配置命令
- docker run -id -p 8080:8080 --name=c_tomcat -v $PWD:/usr/local/tomcat/webapps tomcat
- 参数说明:
- -p 8080:8080: 将容器的8080端口映射到宿主机的8080端口。
- -v $PWD:/usr/local/tomcat/webapps:将主机当前目录挂载到容器的webapps。
- 在/root目录下创建tomcat目录用于存储tomcat数据信息
6.3Nginx
-
搜索nginx镜像
- docker search nginx
-
拉取nginx镜像
- docker pull nginx
-
创建容器,设置端口映射、目录映射
- 在/root目录下创建nginx目录用于存储nginx数据信息
- mkdir ~/nginx
- cd ~/nginx
- mkdir conf
- cd conf
- 在~nginx/conf/下创建nginx文件,粘贴下面内容
- vim nginx.conf
- 在/root目录下创建nginx目录用于存储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/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 -p 80:80 --name=c_nginx -v $PWD:/conf/nginx.conf:/etc/nginx/nginx.conf -v $PWD/logs:/var/log/nginx -v $PWD/html:/usr/share/nginx/html nginx
- 参数说明:
- -p 80:80: 将容器的80端口映射到宿主机的80端口。
- -v $PWD:/conf/nginx.conf:/etc/nginx/nginx.conf:将主机当前目录下的/conf/nginx.conf挂载到容器的/etc/nginx/nginx.conf配置目录。
- -v $PWD/logs:/var/log/nginx:将主机当前目录下的logs目录挂载到容器的/var/log/nginx日志目录。
6.4Redis
- 搜索redis镜像
- docker search redis
- 拉取nginx镜像
- docker pull redis:5.0
- 创建容器,设置端口映射
- docker run -id -p 6379:6379 --name=c_redis nginx:5.0