Docker的入门以及简单应用的安装

目录

一、Docker简介

二、Centos安装docker

三、阿里镜像加速器配置

四、常用的命令

五、安装常用软件

5.1、安装java

5.2、安装Nginx

安装nginx

nginx配置负载均衡

5.3、安装Mysql

安装mysql

主从配置

5.4、安装redis

六、安装自己的镜像文件

七、docker卸载应用程序


一、Docker简介

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

二、Centos安装docker

      

1、Docker 要求 CentOS 系统的内核版本在 3.10以上 ,通过 uname -r 命令查看你当前的内核版本

[root@localhost ~]# uname -r

3.10.0-957.el7.x86_64

2、确保 yum 包更新到最新。

[root@localhost ~]# yum -y update

3、卸载旧版本(如果安装过旧版本的话,我没安装不执行这个)

yum remove docker docker-common docker-selinux docker-engine

4、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的

[root@localhost ~]# yum install -y yum-utils device-mapper-persistent-data lvm2

5、设置yum源

[root@localhost ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo(这个是国外的,可能不好使,建议使用阿里的)

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

6、 可以查看所有仓库中所有docker版本,并选择特定版本安装

[root@localhost ~]# yum list docker-ce --showduplicates | sort -r

7、安装docker 默认安装最新稳定版本

[root@localhost ~]# sudo yum install -y docker-ce

8、启动加入开机启动

[root@localhost ~]# systemctl start docker

[root@localhost ~]# systemctl enable docker

9、 验证安装是否成功(有client和service两部分表示docker安装启动都成功了)

docker version

三、阿里镜像加速器配置

阿里地址 阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台

 下面配置可以清楚docker 的日志文件

{
  "registry-mirrors": ["https://3kcpregv.mirror.aliyuncs.com"],
  "log-driver":"json-file",
  "log-opts":{ "max-size" :"100m","max-file":"1"}
}

四、常用的命令

docker images  查看镜像文件

docker ps  查看正在运行的容器

docker ps –a  查看所有的容器

docker container exec -it f0b1c8ab3633 /bin/bash  进入到容器

exit 退出

docker version  查看版本

docker run -d -p 81:80 nginx 启动nginx容器

docker rmi imgageid 删除镜像

docker rm 容器id 删除容器

五、安装常用软件

5.1、安装java

docker pull java:8(数字为指定的java版本)

5.2、安装Nginx

安装nginx

1、拉取镜像

[root@localhost local]# docker pull nginx

运行

docker run -d -p 81:80 nginx

在本例中,为 docker run添加了两个参数,含义如下:

-d 后台运行

-p 宿主机端口:容器端口     #开放容器端口到宿主机端口

访问 http://Docker宿主机 IP:81/,将会看到nginx的主界面如下:

需要注意的是,使用 docker run命令创建容器时,会先检查本地是否存在指定镜像。如果本地不存在该名称的镜像, Docker就会自动从 Docker Hub下载镜像并启动一个 Docker容器。

2. 列出容器用 docker ps命令即可列出运行中的容器

3. 查看容器的信息 docker inspect 3af5513d208e

nginx配置负载均衡

第一中方式进入容器内

docker container exec -it f0b1c8ab3633(容器的id) /bin/bash

默认用用程序安装在/etc/nginx/

然后修改这个文件即可。

需要安装编辑器

apt-get update && apt-get install vim -y 

第二种方式(推荐)

创建挂在目录

[root@bogon ~]# mkdir -p /data/nginx/{conf,conf.d,html,logs}

启动nginx

 docker run --name nginx -d -p 80:80 \
 -v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf  \
 -v /data/nginx/conf.d/:/etc/nginx/conf.d \
 -v /data/nginx/html:/etc/nginx/html \
 -v /data/nginx/logs:/var/log/nginx \
 nginx:1.21.4

修改配置文件内容如下

#user  nobody;
worker_processes  1;
#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       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  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;
    upstream backServer{
	server ip:8080;  #这个ip是服务器的ip 
	server ip:8081;
    }
    server {
        listen       80;
        server_name  www.xiaojie.com;


        location / {
            proxy_pass  http://backServer;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
     
    }

}

浏览器访问 发现实现了负载均衡的效果

如果启动过程报错

在docker容器上部署项目后,启动docker容器,出现

Error response from daemon: driver failed programming external connectivity on endpoint nginx (a26d84300f536a2b37db422497bd56081c7f8e22c3180f271a48605a373a5cee):  (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 443 -j DNAT --to-destination 172.17.0.2:443 ! -i docker0: iptables: No chain/target/match by that name.

解决方案:

  1、先看能不能ping通网络。若能依次执行以下命令;

  2、pkill docker

  3、iptables -t nat -F

  4、ifconfig docker0 down

  5、brctl delbr docker0

  6、docker -d

  7、systmctl restart docker 

  8、重启docker服务

5.3、安装Mysql

安装mysql

拉取镜像

[root@bogon conf]# docker pull mysql:5.7

安装容器

[root@bogon conf]# docker create --name mysql -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 mysql:5.7

启动

[root@bogon conf]# docker start mysql

然后进入容器

主从配置

安装主mysql

挂载mysql配置文件

在data下创建mysql

[root@bogon ~]# mkdir -p /data/mysql/{conf,data}

启动

修改my.cnf

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
lower_case_table_names=1
#log-error      = /var/log/mysql/error.log
# By default we only accept connections from localhost
#bind-address   = 127.0.0.1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
#添加主节点配置
server_id=1  ###服务器id
log-bin=mysql-bin   ###开启日志文件

启动主库

[root@bogon conf]# docker run --name mysqlmaster  --privileged=true -p 3306:3306 -v /data/mysql/conf/my.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -v /data/mysql/data:/var/lib/mysql -e  MYSQL_ROOT_PASSWORD=root -d mysql:5.7

创建从库挂载目录

mkdir -p /data/mysqlslave/{conf,data }

修改从库my.cnf

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
lower_case_table_names=1
#log-error      = /var/log/mysql/error.log
# By default we only accept connections from localhost
#bind-address   = 127.0.0.1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

#server_id=1  ###服务器id
#log-bin=mysql-bin   ###开启日志文件
#添加从节点配置
server_id=2  ###从服务器server_id
log-bin=mysql-bin  ###日志文件同步方式
binlog_do_db=test   ###同步数据库

启动从库

[root@bogon conf]# docker run --name mysqlslave  --privileged=true -p 3307:3306 -v /data/mysqlslave/conf/my.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -v /data/mysqlslave/data:/var/lib/mysql -e  MYSQL_ROOT_PASSWORD=root -d mysql:5.7

在主库上执行如下sql

show variables like '%server_id%';

show master status;

看到如下配置成功。

在从库上开始同步

CHANGE MASTER TO master_host = '192.168.139.150',

master_user = 'root',

master_password = 'root',

master_log_file = 'mysql-bin.000003', #上面查询的值

master_log_pos = 355; #上面查询的值

START SLAVE; #开启

STOP SLAVE;

SHOW SLAVE STATUS;

5.4、安装redis

拉取镜像

[root@bogon conf]# docker pull redis

创建挂载目录

mkdir -p /data/redis/{conf,data}

redis.conf 修改和其他安装一直

修改redis为后台启动进程

/将daemonize no 改成daemonize yes

允许IP地址访问

注释掉#bind 127.0.0.1

修改redis启动密码

requirepass xiaojie

启动

[root@bogon conf]# docker run -p 6379:6379 --name redis -v /data/redis/conf/redis.conf:/etc/redis/redis.conf  -v /data/redis/data:/data -d redis

若需要密码启动是

[root@localhost conf]# docker run -p 6379:6379 --name redis -v /data/redis/conf/redis.conf:/etc/redis/redis.conf  -v /data/redis/data:/data -d redis --requirepass xiaojie

六、安装自己的镜像文件

1、创建文件存放jar包

mkdir /usr/local/dockerapp

2、添加Dockerfile文件

Vi Dockerfile

添加以下内容

FROM java:8

###复制文件到容器app-springboot

ADD docker-springboot.jar(你的jar包名称) /app-springboot.jar

###声明启动端口号

EXPOSE 8080

###配置容器启动后执行的命令

ENTRYPOINT ["java","-jar","/app-springboot.jar"]

3、使用docker build命令构建镜像

docker build -t docker-springboot .(这个点别丢了,同级目录下)

# 格式: docker build -t 镜像名称:标签 Dockerfile的相对位置

4、运行

docker run -p 8080:8080 docker-springboot

注意:报错 ,找不到主类,jar包没有指明mainClass 在pom文件添加如下配置

  <build>

        <plugins>

            <plugin>

                <groupId>org.springframework.boot</groupId>

                <artifactId>spring-boot-maven-plugin</artifactId>

                <configuration>

                    <mainClass>com.xiaojie.controller.IndexController</mainClass>

                </configuration>

                <executions>

                    <execution>

                        <goals>

                            <goal>repackage</goal>

                        </goals>

                    </execution>

                </executions>

            </plugin>

        </plugins>

        <finalName>docker-springboot</finalName>

</build>

七、docker卸载应用程序

先删除容器,在删除镜像

查询容器

Docker ps 查询运行的容器

docker ps –a(查询所有的容器)

使用容器id删除容器

docker rm 18e672ecd8ed

查询镜像

docker images

使用镜像id删除镜像

docker rmi d23bdf5b1b1b

注:删除报错是

Error response from daemon: conflict: unable to delete 0611932b0d62 (must be forced) - image is referenced in multiple repositories

解决方案:首先docker rmi时指定名称,而非image id,然后再执行docker rmi -f image id即可:

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

熟透的蜗牛

永远满怀热爱,永远热泪盈眶

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值