❤️虚拟机linux centos7下安装docker以及项目环境集成

小明的学习圈子2023-12-03环境

虚拟机linux centos7下安装docker以及项目环境集成open in new window

一、Docker的安装

1.Docker官网:https://docs.docker.com/engine/install/centos/

1.1Docker基本命令快速入门

img

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编辑】,配置阿里云镜像加速器,前提是注册并开通了阿里云服务,下边有介绍)

配置截图

img

上边配置用到的命令

1.创建文件mkdir -p /etc/docker
2.修改配置,设置镜像vim /etc/docker/daemon.json
{"registry-mirrors": ["https://你的阿里云加速器.aliyuncs.com"]}//阿里云镜像加速器,每个阿里云的加速器不一样
3.重启后台线程systemctl daemon-reload
4.重启dorkersystemctl restart docker

执行vim /etc/docker/daemon.json后的界面(注意这里,把你的阿里云镜像加速器地址加上去,然后按esc会退出编辑,然后输入英文冒号:在输入wq,最后按回车即可保存。这里用到vim,不会的百度搜索【linux 保存vim编辑】)

img

阿里云镜像加速器地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

阿里云镜像加速器需要注册阿里云用户,然后找到【容器镜像服务 ACR】->【管理控制台】->【镜像工具】->【镜像加速器】

img

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

img

img

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,最后回车。

img

1.6redis容器随docker启动自动运行

redis容器随docker启动自动运行
docker update redis --restart=always

1.7redis.conf文件官网参考

地址:https://redis.io/topics/config#redis-configuration

2.Docker集成mysql

img

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。日志目录

Last Updated 2024/4/6 10:47:15