Docker(二)


title: Docker(2)
date: 2020-07-03
categories:

  • Docker
    tags:
  • Docker
  • 容器

Docker(二)

redis 容器部署

拉取redis 镜像
docker pull redis

运行redis(redis 默认端口为6379)
docker run -di --name=myredis -p 6379:6379

进入容器
docker exec -it myredis /bin/bash

进入容器后操作redis

root@06017caff1e5:/data# cd /usr/local/bin/
root@06017caff1e5:/usr/local/bin# ls
docker-entrypoint.sh  gosu  redis-benchmark  redis-check-aof  redis-check-rdb  redis-cli  redis-sentinel  redis-server
root@06017caff1e5:/usr/local/bin# ./redis-cli 
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> set set ctzeng
OK
127.0.0.1:6379> get set
"ctzeng"
127.0.0.1:6379> 
docker-compose

一个容器可以理解为一个服务
docker-compose将多个容器组合成一个项目—>使用docker-compose.yml可以同时启动容器和容器之间的依赖关系

安装
curl -L “https://github.com/docker/compose/releases/download/1.24.1/docker-compose- ( u n a m e − s ) − (uname -s)- (unames)(uname -m)” -o /usr/local/bin/docker-compose

//改为可执行文件
[root@iZwz99ig7c1smtrw20di55Z ~]# chmod +x /usr/local/bin/docker-compose
[root@iZwz99ig7c1smtrw20di55Z ~]# docker-compose -v
docker-compose version 1.24.1, build 4667896b
//如需卸载 删除此文件即可
[root@iZwz99ig7c1smtrw20di55Z ~]# rm -f /usr/local/bin/docker-compose
小结:
部署项目时可以编写一个docker-compose.yml文件

####docker-compose 模板文件

指令格式:
docker-compose [-f 参数…] [options] [COMMAND] [ARGS…]
-f ,-file FILE指定使用的compose模板文件,默认为docker-compose.yml 可以多次指定

在此路径下存放配置文件

[root@iZwz99ig7c1smtrw20di55Z mycompose]# pwd
/usr/local/mycompose

配置好之后重启docker

[root@iZwz99ig7c1smtrw20di55Z mycompose]# systemctl restart docker

重启之后启动docker-compose -d是后台运行参数 如果没有则会进入命令行

[root@iZwz99ig7c1smtrw20di55Z mycompose]# docker-compose up -d
Creating network "mycompose_dev" with driver "bridge"
Creating network "mycompose_pro" with driver "bridge"
Creating redis1 ... done
Creating mysql1 ... done
Creating web1   ... done


docker-compose.yml 配置如下

version: "3"
services:
  redis1:
    image: redis
    ports:
      - "6379:6379"
    container_name: "redis1"
    networks:
      - dev
  mysql1:
    image: centos/mysql-57-centos7
    environment:
      MYSQL_ROOT_PASSWORD: "root"
    ports:
      - "3306:3306"
    container_name: "mysql1"
    networks:
      - dev
  web1:
    image: tomcat
    ports:
      - "8080:8080"
    container_name: "web1"
    networks:
      - dev
      - pro
networks:
  dev:
    driver: bridge
  pro:
    driver: bridge


启动之后可以查看docker容器运行情况 和网络配置情况

[root@iZwz99ig7c1smtrw20di55Z mycompose]# docker ps
CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS              PORTS                    NAMES
0a414e6a2b9d        tomcat                    "catalina.sh run"        2 minutes ago       Up 2 minutes        0.0.0.0:8080->8080/tcp   web1
4d75abbb2718        redis                     "docker-entrypoint.s…"   2 minutes ago       Up 2 minutes        0.0.0.0:6379->6379/tcp   redis1
775c9a16f383        centos/mysql-57-centos7   "container-entrypoin…"   2 minutes ago       Up 2 minutes        0.0.0.0:3306->3306/tcp   mysql1
[root@iZwz99ig7c1smtrw20di55Z mycompose]# pwd
/usr/local/mycompose
[root@iZwz99ig7c1smtrw20di55Z mycompose]# ^C
[root@iZwz99ig7c1smtrw20di55Z mycompose]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
6cc3e194ea5e        bridge              bridge              local
e8ad9e43d708        host                host                local
d6c97cc3c052        mycompose_dev       bridge              local
c9929f639734        mycompose_pro       bridge              local
3801267eee23        none                null                local

迁移与备份

在当前的容器中安装了各种组件,期望在其他服务器上也能快速拥有该容器的一切环境;可以将当前的容器作为镜像,再将当前镜像复制到其他服务器,其他服务器基于该镜像运行容器

1.将容器先保存为一个镜像

[root@iZwz99ig7c1smtrw20di55Z ~]# docker commit mynginx mynginx
sha256:b65f0105d247f4cde3534a7c14ca52fc131201d0e1b7eb0910a8bbdb67fbfcb9
[root@iZwz99ig7c1smtrw20di55Z ~]# docker images
REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
mynginx                   latest              b65f0105d247        8 seconds ago       132MB
redis                     latest              235592615444        3 weeks ago         104MB
tomcat                    latest              2eb5a120304e        3 weeks ago         647MB
nginx                     latest              2622e6cca7eb        3 weeks ago         132MB
centos                    7                   b5b4d78bc90c        2 months ago        203MB
centos/mysql-57-centos7   latest              f83a2938370c        8 months ago        452MB
[root@iZwz99ig7c1smtrw20di55Z ~]# 

2.备份镜像

[root@iZwz99ig7c1smtrw20di55Z ~]# docker save -o mynginx.tar mynginx
[root@iZwz99ig7c1smtrw20di55Z ~]# ll
total 133160
-rw------- 1 root root 136352256 Jul  5 21:04 mynginx.tar

3.恢复镜像

[root@iZwz99ig7c1smtrw20di55Z ~]# docker images
REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
redis                     latest              235592615444        3 weeks ago         104MB
tomcat                    latest              2eb5a120304e        3 weeks ago         647MB
nginx                     latest              2622e6cca7eb        3 weeks ago         132MB
centos                    7                   b5b4d78bc90c        2 months ago        203MB
centos/mysql-57-centos7   latest              f83a2938370c        8 months ago        452MB
[root@iZwz99ig7c1smtrw20di55Z ~]# docker load -i mynginx.tar 
a8c961e42b92: Loading layer [==================================================>]  24.06kB/24.06kB
Loaded image: mynginx:latest
[root@iZwz99ig7c1smtrw20di55Z ~]# docker images
REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
mynginx                   latest              b65f0105d247        7 minutes ago       132MB
redis                     latest              235592615444        3 weeks ago         104MB
tomcat                    latest              2eb5a120304e        3 weeks ago         647MB
nginx                     latest              2622e6cca7eb        3 weeks ago         132MB
centos                    7                   b5b4d78bc90c        2 months ago        203MB
centos/mysql-57-centos7   latest              f83a2938370c        8 months ago        452MB

4.基于镜像运行容器

[root@iZwz99ig7c1smtrw20di55Z ~]# docker run -di --name=mynginx -p 80:80 mynginx
787302a165b366ca75a46b2e8702d00a2c6199c1f177f9243414d5ed80044ec0

[root@iZwz99ig7c1smtrw20di55Z ~]# 
[root@iZwz99ig7c1smtrw20di55Z ~]# docker ps 
CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS              PORTS                    NAMES
787302a165b3        mynginx                   "/docker-entrypoint.…"   8 seconds ago       Up 7 seconds        0.0.0.0:80->80/tcp       mynginx
0a414e6a2b9d        tomcat                    "catalina.sh run"        10 hours ago        Up 10 hours         0.0.0.0:8080->8080/tcp   web1
4d75abbb2718        redis                     "docker-entrypoint.s…"   10 hours ago        Up 10 hours         0.0.0.0:6379->6379/tcp   redis1
775c9a16f383        centos/mysql-57-centos7   "container-entrypoin…"   10 hours ago        Up 10 hours         0.0.0.0:3306->3306/tcp   mysql1

使用dockerfile 创建镜像

假设在centos7作为基础镜像上,添加jdk1.8并构建一个包含jdk1.8的centos7的新镜像
实现步骤:
1.拉取centos7 镜像
docker pull centos7
2.上传jdk1.8

[root@iZwz99ig7c1smtrw20di55Z ~]# mkdir -p /usr/local/dockerjdk8
[root@iZwz99ig7c1smtrw20di55Z ~]# cd /usr/local/dockerjdk8/
[root@iZwz99ig7c1smtrw20di55Z dockerjdk8]# ll
total 177192
-rw-r--r-- 1 root root 181442359 Jul  5 21:46 jdk-8u111-linux-x64.tar.gz

3.编写Dcokerfile文件:
内容:

FROM centos:7
MAINTAINER ITCAST
WORKDIR /usr
RUN mkdir /usr/local/java
ADD jdk-8u111-linux-x64.tar.gz /usr/local/java/
ENV JAVA_HOME /usr/local/java/jdk1.8.0_111
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH

4.构建镜像

[root@iZwz99ig7c1smtrw20di55Z dockerjdk8]# docker build -t='jdk1.8' .
Sending build context to Docker daemon  181.4MB
Step 1/9 : FROM centos:7
 ---> b5b4d78bc90c
Step 2/9 : MAINTAINER ITCAST
 ---> Running in 6468e2ae8502
Removing intermediate container 6468e2ae8502
 ---> ed3bd8fddf32
Step 3/9 : WORKDIR /usr
 ---> Running in 0fe1ec74eef5
Removing intermediate container 0fe1ec74eef5
 ---> 755c00d9a462
Step 4/9 : RUN mkdir /usr/local/java
 ---> Running in 3639c04acf7a
Removing intermediate container 3639c04acf7a
 ---> bf2f1f85c15f
Step 5/9 : ADD jdk-8u111-linux-x64.tar.gz /usr/local/java/
 ---> 2b89ce4fced4
Step 6/9 : ENV JAVA_HOME /usr/local/java/jdk1.8.0_111
 ---> Running in 58486962b010
Removing intermediate container 58486962b010
 ---> dc0be6620fb1
Step 7/9 : ENV JRE_HOME $JAVA_HOME/jre
 ---> Running in 1e727351662a
Removing intermediate container 1e727351662a
 ---> 58a728a2b620
Step 8/9 : ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
 ---> Running in 526e23e4a714
Removing intermediate container 526e23e4a714
 ---> 76aeff80a706
Step 9/9 : ENV PATH $JAVA_HOME/bin:$PATH
 ---> Running in 7c598b87acfe
Removing intermediate container 7c598b87acfe
 ---> 016ac73f0b2c
Successfully built 016ac73f0b2c
Successfully tagged jdk1.8:latest
[root@iZwz99ig7c1smtrw20di55Z dockerjdk8]# docker images
REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
jdk1.8                    latest              016ac73f0b2c        7 seconds ago       569MB
mynginx                   latest              b65f0105d247        58 minutes ago      132MB
redis                     latest              235592615444        3 weeks ago         104MB
tomcat                    latest              2eb5a120304e        3 weeks ago         647MB
nginx                     latest              2622e6cca7eb        3 weeks ago         132MB
centos                    7                   b5b4d78bc90c        2 months ago        203MB
centos/mysql-57-centos7   latest              f83a2938370c        8 months ago        452MB

5,测试(基于新镜像创建并运行容器,运行java -version)

[root@iZwz99ig7c1smtrw20di55Z dockerjdk8]# docker run -it --name=testjdk jdk1.8 /bin/bash
[root@bf0829d0f536 usr]# java -version
java version "1.8.0_111"
Java(TM) SE Runtime Environment (build 1.8.0_111-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)

Docker私有仓库

1.拉取 registry镜像

[root@iZwz99ig7c1smtrw20di55Z dockerjdk8]# docker pull registry
Using default tag: latest
latest: Pulling from library/registry
cbdbe7a5bc2a: Pull complete 
47112e65547d: Pull complete 
46bcb632e506: Pull complete 
c1cc712bcecd: Pull complete 
3db6272dcbfa: Pull complete 
Digest: sha256:8be26f81ffea54106bae012c6f349df70f4d5e7e2ec01b143c46e2c03b9e551d
Status: Downloaded newer image for registry:latest
docker.io/library/registry:latest

2.运行registry镜像

[root@iZwz99ig7c1smtrw20di55Z dockerjdk8]# docker run -di --name=registry -p 5000:5000 registry
58ed1b411ee1cac4a0f47ae75db91ff176b5a6c708aef271eba68f2c7f275c96

3.编写daemon.json内容
添加 “insecure-registries”:[“宿主机ip:5000”]

[root@iZwz99ig7c1smtrw20di55Z ~]#  vi /etc/docker/daemon.json

{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"],
"insecure-registries":["119.23.232.213:5000"]
}

4.重启并启动registry镜像

[root@iZwz99ig7c1smtrw20di55Z ~]# systemctl restart docker
[root@iZwz99ig7c1smtrw20di55Z ~]#  docker start registry

访问http://119.23.232.213:5000/v2/_catalog
页面出现{“repositories”:[]} 就说明成功

将镜像上传至私有库

1.标记镜像为私有仓库的镜像

[root@iZwz99ig7c1smtrw20di55Z ~]# docker tag jdk1.8 119.23.232.213:5000/jdk1.8

2.再次启动私有仓库容器

[root@iZwz99ig7c1smtrw20di55Z ~]# docker restart registry
registry

3.上传标记的镜像

[root@iZwz99ig7c1smtrw20di55Z ~]# docker push 119.23.232.213:5000/jdk1.8

4.访问http://119.23.232.213:5000/v2/_catalog

{"repositories":["jdk1.8"]}

从私有仓库中拉取镜像

若是在私有仓库所在服务器上去拉取镜像 ,那么则直接执行如下命令

1.因为私有仓库所在的服务器上自己存在相关镜像,所以先删除,请指定镜像名,不是id

[root@iZwz99ig7c1smtrw20di55Z ~]# docker rmi 119.23.232.213:5000/jdk1.8
Untagged: 119.23.232.213:5000/jdk1.8:latest
Untagged: 119.23.232.213:5000/jdk1.8@sha256:cf75d656b34e1aed5a9b881e77d2cef2566525e5a8e6a975f038e7a2f059e33c

2.拉取镜像

[root@iZwz99ig7c1smtrw20di55Z ~]# docker pull 119.23.232.213:5000/jdk1.8
Using default tag: latest
latest: Pulling from jdk1.8
Digest: sha256:cf75d656b34e1aed5a9b881e77d2cef2566525e5a8e6a975f038e7a2f059e33c
Status: Downloaded newer image for 119.23.232.213:5000/jdk1.8:latest
119.23.232.213:5000/jdk1.8:latest
[root@iZwz99ig7c1smtrw20di55Z ~]# docker images
REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
119.23.232.213:5000/jdk1.8   latest              016ac73f0b2c        2 hours ago         569MB
jdk1.8                       latest              016ac73f0b2c        2 hours ago         569MB
mynginx                      latest              b65f0105d247        3 hours ago         132MB
registry                     latest              2d4f4b5309b1        2 weeks ago         26.2MB
redis                        latest              235592615444        3 weeks ago         104MB
tomcat                       latest              2eb5a120304e        3 weeks ago         647MB
nginx                        latest              2622e6cca7eb        3 weeks ago         132MB
centos                       7                   b5b4d78bc90c        2 months ago        203MB
centos/mysql-57-centos7      latest              f83a2938370c        8 months ago        452MB

3.可以通过如下命令查看docker的信息,了解私有仓库地址
docker info

其他服务器拉取私有仓库镜像

大多数情况下,都是某台服务器部署私有仓库之后;到其他服务器上从私有仓库中拉取镜像,若要拉取私有仓库镜像都需要去修改docker的配置文件,设置启动时的仓库地址

#打开配置文件
vi /usr/lib/systemd/system/docker.service

#在打开的上述文件中按照下面的图,添加如下的内容:注意修改下面内容的ip地址
--add-registry=私有仓库地址:端口号 --insecure-registry=私有仓库地址:端口号\

#修改完后需要重新加载docker配置文件并重启docker
systemctl daemon-reload
systemctl restart docker
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值