虚拟机linux centos7下安装docker以及项目环境集成
一、Docker的安装
1.Docker官网:https://docs.docker.com/engine/install/centos/
1.1Docker基本命令快速入门
1)镜像命令
镜像:相当于应用的安装包,在Docker部署的任何应用都需要先构建成为镜像
docker search 镜像名称 搜索镜像
docker pull 镜像名称 拉取镜像
docker images 查看本地所有镜像
docker images –q # 查看所用镜像的id
docker rmi -f 镜像名称 删除镜像
docker pull openjdk:8-jdk-alpine
docker rmi 镜像id # 删除指定本地镜像
docker rmi `docker images -q` # 删除所有本地镜像
2)容器命令
容器:容器是由镜像创建而来。容器是Docker运行应用的载体,每个应用都分别运行在Docker的每个容器中。
docker run -i 镜像名称:标签 运行容器(默认是前台运行)
docker ps 查看运行的容器
docker ps -a 查询所有容器
创建并启动容器
docker run 参数
参数说明:
-i:保持容器运行。通常与 -t 同时使用。加入it这两个参数后,容器创建后自动进入容器中,退出容器后,容器自动关闭。
-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用。
-d:以守护(后台)模式运行容器。创建一个容器在后台运行,需要使用docker exec 进入容器。退出后,容器不会关闭。
-it 创建的容器一般称为交互式容器,-id 创建的容器一般称为守护式容器
-p:公开容器端口给当前宿主机
--name:为创建的容器命名。docker exec -it 容器ID/容器名称 /bin/bash 进入容器内部
docker start/stop/restart 容器名称/ID 启动/停止/重启容器
docker rm -f 容器名称/ID 删除容器
2.确定CentOS7及以上版本
cat /etc/redhat-release
3.yum安装gcc
yum -y install gcc-c++
查看版本
gcc -v
4.卸载旧版本(sudo表示root用户,如果是root用户不用加sudo,\表示换号)
sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
5.安装需要的软件包
yum install -y yum-utils
6.设置stable镜像仓库(这里用阿里云镜像,官方镜像慢并且可能会出现一些问题,docker-ce表示社区的docker免费,缺点是有些功能无法使用)
阿里云镜像安装
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装成功后查看信息
cat /etc/yum.repos.d/docker-ce.repo
7.安装之后,更新yum软件包索引
yum makecache fast
8.安装DOCKER centos
列出需要安装的版本列表
yum list docker-ce --showduplicates | sort -r
安装指定版本(这里使用18.0.1版本)
sudo yum install docker-ce-18.06.1.ce
安装最新版本
sudo yum install docker-ce docker-ce-cli containerd.io
9.启动docker
systemctl start docker (启动docker)
docker version(版本查看)
sudo docker images(查看docker已有镜像)
sudo systemctl enable docker(设置开机自启动)
systemctl stop docker (停止docker)
systemctl status docker (docker状态)
10.测试
docker run hello-world
11.配置镜像加速(这里用到vim,不会的百度搜索【linux 保存vim编辑】,配置阿里云镜像加速器,前提是注册并开通了阿里云服务,下边有介绍)
配置截图
上边配置用到的命令
1.创建文件
mkdir -p /etc/docker 2.修改配置,设置镜像
vim /etc/docker/daemon.json {"registry-mirrors": ["https://你的阿里云加速器.aliyuncs.com"]}//阿里云镜像加速器,每个阿里云的加速器不一样 3.重启后台线程
systemctl daemon-reload 4.重启dorker
systemctl restart docker
执行vim /etc/docker/daemon.json后的界面(注意这里,把你的阿里云镜像加速器地址加上去,然后按esc会退出编辑,然后输入英文冒号:在输入wq,最后按回车即可保存。这里用到vim,不会的百度搜索【linux 保存vim编辑】)
阿里云镜像加速器地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
阿里云镜像加速器需要注册阿里云用户,然后找到【容器镜像服务 ACR】->【管理控制台】->【镜像工具】->【镜像加速器】
12.卸载
卸载 Docker Engine、CLI 和 Containerd 包
sudo yum remove docker-ce docker-ce-cli containerd.io 主机上的映像、容器、卷或自定义配置文件不会自动删除。删除所有镜像、容器和卷: sudo rm -rf /var/lib/docker sudo rm -rf /var/lib/containerd
二、Docker集成项目环境
1.Docker集成redis
1.1网址:https://hub.docker.com/
搜索redis
1.2下载镜像文件
docker pull redis
1.3创建实例并启动
创建
创建redis配置文件目录 mkdir -p /mydata/redis/conf 容器内部只有etc/redis这两层目录,使用tocu创建redis.conf touch /mydata/redis/conf/redis.conf
启动redis容器
- linux的6379映射到docker的6379
- --name redis给容器起个名称-redis
- -v 把docker容器内部的/data文件夹挂载到linux外部的/mydata/redis/data文件夹中(/data中存放的是redis的数据)
- -d 后台运行,以redis镜像启动,同时指定服务以加载redis.conf这个配置文件加载
docker run -p 6379:6379 --name redis \ -v /mydata/redis/data:/data \ -v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \ -d redis redis-server /etc/redis/redis.conf
使用docker ps查看redis是否启动成功
[root@localhost conf]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e77296835c8b redis "docker-entrypoint.s…" 27 seconds ago Up 25 seconds 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp redis
1.4测试redis
直接连接redis客户端。
docker exec -it redis redis-cli
新建a并赋值为b。
[root@localhost conf]# docker exec -it redis redis-cli 127.0.0.1:6379> set a b OK 127.0.0.1:6379> get a "b" 127.0.0.1:6379> exit
1.5redis持久化(新版本可能默认持久化)
[root@localhost conf]# docker exec -it redis redis-cli 127.0.0.1:6379> get a "b" 127.0.0.1:6379> exit [root@localhost conf]# docker exec -it redis redis-cli 127.0.0.1:6379> exit [root@localhost conf]# pwd /mydata/redis/conf [root@localhost conf]# ls redis.conf [root@localhost conf]# vi redis.conf [root@localhost conf]# docker restart redis redis [root@localhost conf]#
执行vi redis.conf会弹出下面的窗口,按i进入编辑模式,输入appendonly yes,然后按ESC,英文:wq,最后回车。
1.5redis容器随docker启动自动运行
redis容器随docker启动自动运行
docker update redis --restart=always
1.6redis.conf文件官网参考
地址:https://redis.io/topics/config#redis-configuration
2.Docker集成mysql
2.1安装mysql
docker pull mysql【:5.7】//不指定版本默认安装最新版本,指定版本冒号 docker pull mysql :版本号
安装5.7
[root@hadoop-104 module]# docker pull mysql:5.7 5.7: Pulling from library/mysql 123275d6e508: Already exists 27cddf5c7140: Pull complete c17d442e14c9: Pull complete 2eb72ffed068: Pull complete d4aa125eb616: Pull complete 52560afb169c: Pull complete 68190f37a1d2: Pull complete 3fd1dc6e2990: Pull complete 85a79b83df29: Pull complete 35e0b437fe88: Pull complete 992f6a10268c: Pull complete Digest: sha256:82b72085b2fcff073a6616b84c7c3bcbb36e2d13af838cec11a9ed1d0b183f5e Status: Downloaded newer image for mysql:5.7 docker.io/library/mysql:5.7
启动mysql
sudo docker run -p 3306:3306 --name mysql \ -v /mydata/mysql/log:/var/log/mysql \ -v /mydata/mysql/data:/var/lib/mysql \ -v /mydata/mysql/conf:/etc/mysql \ -e MYSQL_ROOT_PASSWORD=root \ -d mysql:5.7
参数说明
-p 3306:3306: 将mysql容器的 3306 端口映射到主机的 3306 端口(mysql容器可以理解为一个Linux系统)
-v /mydata/mysql/conf:/etc/mysql: 映射到将配置文件夹挂载到主机,相关配置文件信息只需要修改/mydata/mysql/conf里的文件,docker里mysql容器的/etc/mysql的配置文件也跟着修改了
-v /mydata/mysql/log:/var/log/mysql:/mydata/mysql/log表示在linux里创建一个/mydata/mysql/log的文件夹,并和docker里mysql容器的var/log/mysql目录下的mysql挂载
-v /mydata/mysql/data:/var/lib/mysql/: 将配置文件夹挂载到主机
-e MYSQL_ROOT_PASSWORD=root: 初始化 root 用户的密码
进入到mysql
[root@stucode ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4ac4baa68c6b mysql:5.7 "docker-entrypoint.s…" 42 seconds ago Up 41 seconds 0.0.0.0:3306->3306/tcp, 33060/tcp mysql [root@stucode ~]# docker exec -it mysql /bin/bash root@4ac4baa68c6b:/# ls bin boot dev docker-entrypoint-initdb.d entrypoint.sh etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var root@4ac4baa68c6b:/# ls / bin boot dev docker-entrypoint-initdb.d entrypoint.sh etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var root@4ac4baa68c6b:/# whereis mysql mysql: /usr/bin/mysql /usr/lib/mysql /etc/mysql /usr/share/mysql
进入到mysql的log日志(/var/log/mysql这个目录下存放日志)
[root@stucode ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4ac4baa68c6b mysql:5.7 "docker-entrypoint.s…" 42 seconds ago Up 41 seconds 0.0.0.0:3306->3306/tcp, 33060/tcp mysql [root@stucode ~]# docker exec -it mysql /bin/bash root@4ac4baa68c6b:/# ls bin boot dev docker-entrypoint-initdb.d entrypoint.sh etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var root@4ac4baa68c6b:/# ls / bin boot dev docker-entrypoint-initdb.d entrypoint.sh etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var root@4ac4baa68c6b:/# whereis mysql mysql: /usr/bin/mysql /usr/lib/mysql /etc/mysql /usr/share/mysql root@4ac4baa68c6b:/# cd /var/log root@4ac4baa68c6b:/var/log# ls alternatives.log apt btmp dpkg.log faillog lastlog mysql wtmp root@4ac4baa68c6b:/var/log# cd mysql/ root@4ac4baa68c6b:/var/log/mysql# ls root@4ac4baa68c6b:/var/log/mysql#
进入到conf目录,修改my.cnf文件
cd /mydata/mysql/conf
vi my.cnf
修改my.cnf文件的内容,按i进入编辑模式,把下面的内容复制进去,然后按ESC,英文:wq,最后回车。
[client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] init_connect='SET collation_connection = utf8_unicode_ci' init_connect='SET NAMES utf8' character-set-server=utf8 collation-server=utf8_unicode_ci skip-character-set-client-handshake skip-name-resolve
重启mysql
docker restart mysql
进入容器查看配置
[root@hadoop-104 conf]# docker exec -it mysql /bin/bash root@b3a74e031bd7:/# whereis mysql mysql: /usr/bin/mysql /usr/lib/mysql /etc/mysql /usr/share/mysql root@b3a74e031bd7:/# ls /etc/mysql my.cnf root@b3a74e031bd7:/# cat /etc/mysql/my.cnf [client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] init_connect='SET collation_connection = utf8_unicode_ci' init_connect='SET NAMES utf8' character-set-server=utf8 collation-server=utf8_unicode_ci skip-character-set-client-handshake skip-name-resolve root@b3a74e031bd7:/#
设置启动docker时,即运行mysql
[root@hadoop-104 ~]# docker update mysql --restart=always mysql [root@hadoop-104 ~]#
进入到mysql容器
[root@localhost ~]# docker exec -it mysql bash
root@062015c958e8:/# mysql -uroot -p
3.Docker集成nginx
3.1拉取nginx镜像
docker pull nginx
3.2创建容器,设置端口映射、目录映射
# 在/root目录下创建nginx目录用于存储nginx数据信息
mkdir ~/nginx
cd ~/nginx
mkdir conf
cd conf
# 在~/nginx/conf/下创建nginx.conf文件,粘贴下面内容
vim nginx.conf
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; }
$PWD必须是上边创建的nginx目录下,否则需要修改目录结构。
docker run -id --name=c_nginx \
-p 90:80 \
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \
-v $PWD/logs:/var/log/nginx \
-v $PWD/html:/usr/share/nginx/html \
-d nginx
-
-p 90:80:将容器的 80端口映射到宿主机的 90 端口。
-
-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。日志目录