linux centos docker 基本使用

安装docker

1、在centos7中安装docker

# 1. yum 包更新到最新
yum update

# 2. 安装需要的软件包,yum-util提供yum-config-manager功能,另外两个是devicemapper驱动依赖
yum install -y yum-utils device-mapper-persistent-data lvm2

# 3. 设置yum源为阿里云
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 4. 安装docker【docker-ce: 社区版,免费;docker-ee:企业版,收费】
yum install docker-ce -y

# 5. 安装后查看docker版本
docker -v

2、Docker:设置ustc镜像源 (不想配课忽略)

# 执行如下命令
mkdir /etc/docker
vi /etc/docker/daemon.json  

内容如下

{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}

或者去阿里云申请国内镜像 申请地址 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

{
"registry-mirrors": [这里填申请到的地址]
}
systemctl daemon-reload
systemctl start docker

3、Docker:服务相关命令

1、基本使用命令

# 启动docker服务
systemctl start docker
# 停止docker服务
systemctl stop docker
# 重启docker服务
systemctl restart docker
# 查看docker服务状态
systemctl status docker
# 设置开机启动docker服务
systemctl enable docker
# 查看docker概要信息
docker info
# 查看docker帮助文档
docker --help

2、查看、删除、拉取、搜索镜像

docker images: 查看镜像
docker search: 搜索镜像
docker pull: 拉取/下载镜像
docker rmi: 删除镜像

# 查看镜像可以使用如下命令:
docker images

# 如果你需要从网络中查找需要的镜像,可以通过以下命令搜索
docker search 镜像名称

# 拉取镜像就是从Docker仓库下载镜像到本地,镜像名称格式为 名称:版本号,如果版本号不指定则是最新的版本 命令如下:
docker pull 镜像名称

# 拉取centos 7
docker pull centos:7
# 拉取centos 最后版本镜像
docker pull centos:latest

# 按照镜像id删除镜像
docker rmi 镜像ID
# 删除所有镜像(谨慎操作)
docker rmi `docker images -q`

4、Docker:容器相关命令

1、查看容器

- 查看正在运行容器: docker ps
- 查看所有容器: docker ps -a 
- 查看最后一次运行的容器: docker ps –l

2、创建与运行容器

可以基于已有的镜像来创建容器,创建与运行容器使用命令: docker run
-i: 表示运行容器

-t: 表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。

--name: 为创建的容器命名。

-v: 表示目录映射关系(前者是宿主机目录,后者是容器的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。

-d: 在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。

-p: 表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射。
1、交互式容器
# 先拉取一个镜像;这一步不是每次启动容器都要做的,而是因为前面我们删除了镜像,
# 无镜像可用所以才再拉取一个
docker pull centos:7

# 创建并启动名称为 mycentos7 的交互式容器
# 容器名称 mycentos7
# 镜像名称:TAG (centos:7)  也可以使用镜像id (5e35e350aded)
# /bin/bash: 进入容器命令行
docker run -it --name=mycentos7 centos:7 /bin/bash
1、守互式容器
# 创建并启动守护式容器
# 容器名称: mycentos2
# 镜像名称:TAG (centos:7)  也可以使用镜像id (5e35e350aded)
docker run -di --name=mycentos2 centos:7

# 进入容器:
# docker exec -it container_name (或者 container_id) /bin/bash
# exit退出时,容器不会停止
docker exec -it mycentos2 /bin/bash

5、容器的基本命令

1、停止、启动、重启容器,重启docker 自动启动容器

FlagDescription
no默认策略,在容器退出时不重启容器
on-failure在容器非正常退出时(退出状态非0),才会重启容器
on-failure:3指定启动的次数,在容器非正常退出时重启容器,最多重启3次
unless-stopped在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
always在容器退出时总是重启容器

Restart policy细节
使用restart policies时需要注意如下细节:
(1) 容器只有在成功启动后restart policy才能生效。这里的"成功启动"是指容器处于up至少10秒且已经处于docker监管。这是避免没有成功启动的容器陷入restart的死循环。
(2)如果手动(manually)的stop(与前面的explicitly stopped有何区别)一个容器,容器设置的restart policy将会被忽略,除非Docker daemon重启或者容器手动重启。这是避免了另外一种死循环。
(3)restart policies只能用于容器,对于swarm services其restart policies有不通过的配置。
参考: flags related to service restart

# 停止正在运行的容器: docker stop 容器名称|容器ID
docker stop mycentos2

# 启动已运行过的容器: docker start 容器名称|容器ID
docker start mycentos2

# 重启正在运行的容器: docker restart 容器名称|容器ID
docker restart mycentos2

# 设置容器重启策略
docker run -dit --restart always mycentos2
# 如果容器已经创建--设置容器重启策略
docker update --restart=always  mycentos2

2、查看容器IP

# 在linux宿主机下查看 mycentos2 的ip
# docker inspect 容器名称(容器ID)

docker inspect mycentos2

3、删除容器

  • 删除指定的容器: docker rm 容器名称|容器ID
  • 删除所有容器: docker rm `docker ps -a -q`
docker rm mycentos2
# 或者
docker rm 2095a22bee70

# 删除所有容器
docker rm `docker ps -a -q`

6、Docker:容器文件拷贝

将linux宿主机中的文件拷贝到容器内可以使用命令:


# docker cp 需要拷贝的文件或目录 容器名称:容器目录

# 创建一个文件abc.txt 
touch abc.txt

# 复制 abc.txt 到 mycentos2 的容器的 / 目录下 
docker cp abc.txt mycentos2:/ 

# 进入mycentos2容器 
docker exec -it mycentos2 /bin/bash 

# 查看容器 / 目录下文件
ll

将文件从容器内拷贝出来到linux宿主机使用命令:

# docker cp 容器名称:容器目录 需要拷贝的文件或目录

# 进入容器后创建文件aaa.txt
touch aaa.txt

# 退出容器
exit

# 在Linux宿主机器执行复制;将容器mycentos2的/aaa.txt文件复制到 宿主机器的/root目录下
docker cp mycentos2:/aaa.txt /root

7、Docker:容器目录挂载

  • 可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器。
  • 创建容器时添加-v参数,后边为宿主机目录:容器目录,例如: docker run -di -v /usr/local/test:/usr/local/test --name=mycentos3 centos:7
# 创建linux宿主机器要挂载的目录 
mkdir /usr/local/test 

# 创建并启动容器mycentos3
# 并挂载 linux中的/usr/local/test目录到容器的/usr/local/test
# 也就是在 linux中的/usr/local/test中操作相当于对容器相应目录操作 
docker run -di -v /usr/local/test:/usr/local/test --name=mycentos3 centos:7

# 在linux下创建文件 
touch /usr/local/test/bbb.txt

# 进入容器 
docker exec -it mycentos3 /bin/bash

# 在容器中查看目录中是否有对应文件bbb.txt
cd /usr/local/test
ll

注意: 如果你共享的是多级的目录,可能会出现权限不足的提示。 这是因为CentOS7中的安全模块selinux把权限禁掉了,需要添加参数 --privileged=true 来解决挂载的目录没有权限的问题。

8、小结Docker的镜像和容器的命令:

1)Docker镜像命令
​	    docker images: 查看本地所有镜像
​        docker search: 到中央仓库搜素镜像
​        docker pull : 拉取镜像
​        docker rmi: 删除本地镜像
​ 2)Docker容器命令
​	    docker ps -a/-l : 查看容器的状态
​        docker run   -it / -di / -v:创建交互式/守护式容器 ,同时挂载文件/目录
​        docker start/stop/restart :启动/停止/重启容器
​        docker rm  :删除容器
​        docker inspect:查看容器的内部IP
​        docker  cp:在宿主机和容器之间拷贝文件

9、Docker:安装mysql容器:

# 拉取MySQL 5.7镜像
docker pull centos/mysql-57-centos7
docker run -di --name=mysql5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql
- -p 代表端口映射,格式为 宿主机映射端口:容器运行端口
- -e 代表添加环境变量 MYSQL_ROOT_PASSWORD 是root用户的远程登陆密码(如果是在容器中使用root登录的话,那么其**密码为空**)

# 创建mysql5.7容器 
docker run -di --name=mysql5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root centos/mysql-57-centos7
# 进入mysql5.7容器
docker exec -it mysql5.7 /bin/bash 

# 登录容器里面的mysql 
mysql -u root -p
# 查看ip;如果以后要内部连接该mysql,如其他容器中要连接mysql容器的mysql的时候,可以使用如下命令查看IP
docker inspect mysql5.7

使用阿里云需要在阿里云控制台打开3306端口远程访问权限

10、Docker:安装tomcat容器

# 拉取tomcat镜像
docker pull tomcat:8
  • 创建容器
# 创建tomcat容器;并挂载了webapps目录 (提供了几种方式创建)

# 方式1
docker run -di --name=tomcat-test -p 6666:8080 \
-v /docker/tomcat/webapps:/usr/local/tomcat/webapps \
tomcat:8
# 将需要用到的文件复制出来
docker cp tomcat-test:/usr/local/tomcat/conf/ /docker/tomcat
docker cp tomcat-test:/usr/local/tomcat/logs/ /docker/tomcat
docker cp tomcat-test:/usr/local/tomcat/webapps.dist/ /docker/tomcat/
cp -r /docker/tomcat/webapps.dist/  /docker/tomcat/webapps

# 方式2(需要先使用方式1把配置文件 conf/ 里面的东西先复制出来)
docker run -di --name=tomcat -p 9090:8080 \
-v /docker/tomcat/webapps:/usr/local/tomcat/webapps \
-v /docker/tomcat/logs:/usr/local/tomcat/logs \
-v /docker/tomcat/conf:/usr/local/tomcat/conf \
tomcat:8

# 如果需要访问tomcat 面板需要改两个配置文件
# /docker/tomcat/conf/tomcat-users.xml
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user username="tomcat" password="tomcat" roles="manager-gui,manager-script,manager-jmx,manager-status,admin-script,admin-gui"/>
#  /docker/tomcat/webapps/manager/META-INF/context.xml
  # 将
    <Valve className="org.apache.catalina.valves.RemoteAddrValve"
       allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
  # 改成
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
       allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|\d+\.\d+\.\d+\.\d+" />


# 查看日志
docker logs -f mytomcat

# 如果出现 WARNING: IPv4 forwarding is disabled. Networking will not work. 
# 执行如下操作 
# 1、编辑 sysctl.conf 
vi /etc/sysctl.conf 

# 2、在上述打开的文件中后面添加 
net.ipv4.ip_forward=1

# 3、重启network
systemctl restart network

测试访问宿主机的端口号为9000的 tomcat。地址:http://宿主机ip:9000,也可以往/user/local/tomcat/webapps下部署应用,然后再访问。

11、docker: 安装 java 环境

目标: 掌握在docker中安装java 容器

操作步骤

  • 拉取镜像

    # 拉取java 镜像 
    docker pull java
    
    # 创建java 容器 
    docker run -di --name=java-test -p 9090:9090 java
    # 或者
    docker run -di --name=java-test -p 9090:8080 -v /docker/java/test:/usr/local/java java
    

``

15、Docker:安装Nginx容器

目标: 掌握在docker中安装nginx容器

操作步骤

# 拉取nginx镜像 
docker pull nginx

先要有这些东西

nginx.conf

  user  nginx;
  worker_processes  auto;

  error_log  /var/log/nginx/error.log notice;
  pid        /var/run/nginx.pid;


  events {
      worker_connections  1024;
  }


  http {

  # 开启gzip
  gzip on;

  # 启用gzip压缩的最小文件;小于设置值的文件将不会被压缩
  gzip_min_length 1k;

  # gzip 压缩级别 1-10
  gzip_comp_level 5;

  # 进行压缩的文件类型。

  gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;

  # 是否在http header中添加Vary: Accept-Encoding,建议开启
  gzip_vary on;



  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;
}

conf.d/default.conf

server {
    listen 443 ssl;
    server_tokens off;
    keepalive_timeout 5;
    root /usr/share/nginx/html; #填写您的网站根目录,例如:/usr/local/lighthouse/softwares/wordpress
    index index.html index.htm;
    server_name xiaoshenren.top; #填写您的证书绑定的域名,例如:cloud.tencent.com
    ssl_certificate conf.d/bbbbbbbb.top_server.crt; #填写您的证书文件名称,例如:1_cloud.tencent.com_bundle.crt
    ssl_certificate_key conf.d/aaaaaaaa.top_server.key; #填写您的私钥文件名称,例如:2_cloud.tencent.com.key
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;  # 可参考此 SSL 协议进行配置
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;   #可按照此加密套件配置,写法遵循 openssl 标准
    ssl_prefer_server_ciphers on;

    include /etc/nginx/conf.d/host/*.conf;

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

server {
    listen       80;
    listen  [::]:80;
    server_name  xiaoshenren.top;

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

    include /etc/nginx/conf.d/host/*.conf;

    # 将请求转成https
    #  rewrite ^(.*)$ https://$host$1 permanent;
}

conf.d/host/default.conf

# 静态资源路径
location / {
    # 跨域配置
    add_header 'Access-Control-Allow-Methods' '*' always;
    add_header 'Access-Control-Allow-Credentials' 'true' always;
    add_header 'Access-Control-Allow-Origin' '$http_origin' always;
    add_header 'Access-Control-Allow-Headers' 'Authorization, Content-Type, X-Requested-With, Cache-Control' always;
    # 给OPTIONS 添加 200 的返回,是为了处理在发送POST请求时Nginx依然拒绝访问的错误
    # 发送"预检请求"时,需要用到方法 OPTIONS ,所以服务器需要允许该方法。
    if ($request_method = OPTIONS ) { return 200; }

    root   /usr/share/nginx/html;
    index  index.html index.htm;
}

# node 服务器代理
location /api/ {
    root   /usr/share/nginx/html;
    index  index.html index.htm;
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header REMOTE-HOST $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://172.17.0.1:3000/api/;
}

# node 文件上传代理
location /files/ {
    root   /usr/share/nginx/html;
    index  index.html index.htm;
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header REMOTE-HOST $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://172.17.0.1:3000/files/;
}

# 外包项目代理
location /project-api/ {

    # 跨域配置
    add_header 'Access-Control-Allow-Methods' '*' always;
    add_header 'Access-Control-Allow-Credentials' 'true' always;
    add_header 'Access-Control-Allow-Origin' '$http_origin' always;
    add_header 'Access-Control-Allow-Headers' 'Authorization, Content-Type, X-Requested-With, Cache-Control' always;
    # 给OPTIONS 添加 200 的返回,是为了处理在发送POST请求时Nginx依然拒绝访问的错误
    # 发送"预检请求"时,需要用到方法 OPTIONS ,所以服务器需要允许该方法。
    if ($request_method = OPTIONS ) { return 200; }


    root   /usr/share/nginx/html;
    index  index.html index.htm;

    proxy_set_header Host $proxy_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header REMOTE-HOST $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://172.17.0.1:8990/;

}
# 外包项目代理
location /project-test-api/ {

    # 跨域配置
    add_header 'Access-Control-Allow-Methods' '*' always;
    add_header 'Access-Control-Allow-Credentials' 'true' always;
    add_header 'Access-Control-Allow-Origin' '$http_origin' always;
    add_header 'Access-Control-Allow-Headers' 'Authorization, Content-Type, X-Requested-With, Cache-Control' always;
    # 给OPTIONS 添加 200 的返回,是为了处理在发送POST请求时Nginx依然拒绝访问的错误
    # 发送"预检请求"时,需要用到方法 OPTIONS ,所以服务器需要允许该方法。
    if ($request_method = OPTIONS ) { return 200; }


    root   /usr/share/nginx/html;
    index  index.html index.htm;

    proxy_set_header Host $proxy_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header REMOTE-HOST $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://172.17.0.1:8991/;

}

#微信功能测试代理
location /wechat-api/ {

    # 跨域配置
    add_header 'Access-Control-Allow-Methods' '*' always;
    add_header 'Access-Control-Allow-Credentials' 'true' always;
    add_header 'Access-Control-Allow-Origin' '$http_origin' always;
    add_header 'Access-Control-Allow-Headers' 'Authorization, Content-Type, X-Requested-With, Cache-Control' always;
    # 给OPTIONS 添加 200 的返回,是为了处理在发送POST请求时Nginx依然拒绝访问的错误
    # 发送"预检请求"时,需要用到方法 OPTIONS ,所以服务器需要允许该方法。
    if ($request_method = OPTIONS ) { return 200; }


    root   /usr/share/nginx/html;
    index  index.html index.htm;

    proxy_set_header Host $proxy_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header REMOTE-HOST $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://172.17.0.1:9090/;

}
# 创建 nginx 容器
docker run -di --name=mynginx -p 80:80 mynginx

# 创建 nginx 容器
# 方式1
docker run -di --name=nginx-test -p 808:80 -p 4433:443 \
-v /docker/nginx-test/config/conf.d/:/etc/nginx/conf.d/ \
-v /docker/nginx-test/config/nginx.conf:/etc/nginx/nginx.conf \
-v /docker/nginx-test/log/:/var/log/nginx/ \
-v /docker/nginx-test/html/:/usr/share/nginx/html/ \
nginx


docker run -di --name=nginx -p 80:80 -p 443:443 \
-v /docker/nginx/config/conf.d/:/etc/nginx/conf.d/ \
-v /docker/nginx/config/nginx.conf:/etc/nginx/nginx.conf \
-v /docker/nginx/log/:/var/log/nginx/ \
-v /docker/nginx/html/:/usr/share/nginx/html/ \
nginx

查看日志

  docker logs -f nginx

16、Docker:安装Redis容器

目标: 掌握在docker中安装redis容器

操作步骤

  • 拉取镜像

    # 拉取redis镜像
    docker pull redis
    
  • 创建容器

    # 创建redis容器
    docker run -di --name=myredis -p 6379:6379 redis
    
     # 查看redis日志
    docker logs -f myredis 
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0wa1JTdt-1593486637900)(assets/1574224235332.png)]

  • 操作redis容器

    # 进入redis容器
    docker exec -it myredis /bin/bash 
    
    # 进入redis安装目录 
    cd /usr/local/bin
    
    # 连接redis 
    ./redis-cli
    

    可以使用redis图形界面客户端工具连接redis,端口也是6379。

17、Docker:安装Rabbitmq容器

目标: 掌握在docker中安装rabbitmq容器

操作步骤

  • 拉取镜像

    # 拉取rabbitmq镜像
    docker pull rabbitmq:management
    
  • 创建容器

    # 创建Rabbitmq容器
    # 创建容器,rabbitmq需要有映射以下端口:
    # 15672: web管理的端口
    # 5672:(客户端连接端口)
    docker run -di --name=myrabbitmq  -p 5672:5672 -p 15672:15672 rabbitmq:management
    
     # 查看日志
    docker logs -f myrabbit
    

18、Docker:安装node容器

目标: 掌握在docker中安装node容器

操作步骤

  • 拉取镜像

    # 拉取rabbitmq镜像
    docker pull node 
    

创建容器

docker run --name=node -p 3000:3000 \
-v /docker/node/:/usr/local/node/ \
-di node
 
  # 查看日志
 docker logs -f myrabbit

18、Docker:容器备份与迁移

目标: 掌握docker中容器的备份与迁移

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ctj6PGBl-1593486637905)(assets/1574231546282.png)]

主要作用: 就是让配置好的容器,可以得到复用,后面用到得的时候就不需要重新配置。

其中涉及到的命令有:

  • docker commit 将容器保存为镜像
  • docker save 将镜像备份为tar文件
  • docker load 根据tar文件恢复为镜像

操作步骤

  • 容器保存为镜像 (使用docker commit命令可以将容器保存为镜像)。

    命令格式: docker commit 容器名称 新的镜像名称

    # 将容器保存为镜像
    # mynginx:容器名称、mynginx:新的镜像名称
    docker commit mynginx mynginx
    

    说明: 此镜像的内容就是当前容器的内容,接下来你可以用此镜像再次运行新的容器.

  • 镜像备份 (使用docker save命令可以将已有镜像保存为tar文件)

    命令格式: docker save –o tar文件名 镜像名

    # 保存镜像为文件 
    docker save -o mynginx.tar mynginx
    
  • 镜像恢复与迁移 (使用docker load命令可以根据tar文件恢复为docker镜像)

    命令格式: docker load -i tar文件名

    # 停止mynginx容器 
    docker stop mynginx
    
    # 删除mynginx容器 
    docker rm mynginx 
    
    # 删除mynginx镜像 
    docker rmi mynginx 
    
    # 加载恢复mynginx镜像 
    docker load -i mynginx.tar 
    
    # 在镜像恢复之后,基于该镜像再次创建启动容器 
    docker run -di --name=mynginx -p 80:80 mynginx
    

总结

  • 容器保存镜像: docker commit 容器名称 新的镜像的名称
  • 导出镜像: docker save -o 镜像名称.tar 新的镜像的名称
  • 导入镜像: docker load -i 镜像名称.tar

19、Docker:Dockerfile构建镜像

目标: 掌握Dockerfile构建镜像

19.1 Dockerfile文件
  • 前面的课程中已经知道了,要获得镜像,可以从Docker仓库中进行下载。那如果我们想自己开发一个镜像,那该如何做呢?答案是: Dockerfile
  • Dockerfile其实就是一个文本文件,由一系列命令和参数构成,Docker可以读取Dockerfile文件并根据Dockerfile文件的描述来构建镜像。
  • Dockerfile文件内容一般分为4部分
    • 基础镜像信息
    • 维护者信息
    • 镜像操作指令
    • 容器启动时执行的指令
19.2 常用命令
命令作用
FROM image_name:tag定义了使用哪个基础镜像启动构建流程
MAINTAINER user_name声明镜像的创建者
ENV key value设置环境变量 (可以写多条)
RUN command是Dockerfile的核心部分(可以写多条)
ADD source_dir/file dest_dir/file将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压
COPY source_dir/file dest_dir/file和ADD相似,但是如果有压缩文件并不能解压
WORKDIR path_dir设置工作目录
19.3 构建镜像
# 1、创建目录 
mkdir -p /usr/local/dockerjdk8 
cd /usr/local/dockerjdk8 

# 2、下载jdk-8u171-linux-x64.tar.gz并上传到服务器(虚拟机)中的/usr/local/dockerjdk8目录 

# 3、在/usr/local/dockerjdk8目录下创建Dockerfile文件,文件内容如下:
vi Dockerfile

FROM centos:7
MAINTAINER ITCAST
WORKDIR /usr
RUN mkdir /usr/local/java
ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/
ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
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、执行命令构建镜像;不要忘了后面的那个 . 
docker build -t='jdk1.8' .

# 5、查看镜像是否建立完成 
docker images

/usr/local/dockerjdk8/Dockerfile 文件中的内容:

说明: 创建文件Dockerfile 这里的D必须大写,不能有任何的偏差。

19.4 镜像创建容器

基于刚刚创建的镜像 jdk1.8 创建并启动容器进行测试

# 创建并启动容器 
docker run -it --name=testjdk jdk1.8 /bin/bash
# 在容器中测试jdk是否已经安装 
java -version

20、Docker:registry私服仓库

目标: 掌握docker私服仓库搭建

20.1 私有仓库搭建与配置

Docker官方的Docker hub(https://hub.docker.com)是一个用于管理公共镜像的仓库,我们可以从上面拉取镜像到本地,也可以把我们自己的镜像推送上去。但是,有时候我们的服务器无法访问互联网,或者你不希望将自己的镜像放到公网当中,那么我们就需要搭建自己的私有仓库来存储和管理自己的镜像。

著名Docker私服软件:

1)registry(官方出品)

2)harbor(非官方出品)

私有仓库搭建步骤:

# 1、拉取私有仓库镜像 
docker pull registry

# 2、启动私有仓库容器
docker run -di --name=registry -p 5000:5000 registry 

# 3、打开浏览器 输入地址http://宿主机ip:5000/v2/_catalog,看到{"repositories":[]} 表示私有仓库 搭建成功 

# 4、修改daemon.json 
vi /etc/docker/daemon.json

# 在上述文件中添加一个key,保存退出。此步用于让 docker 信任私有仓库地址;注意将宿主机ip修改为自己宿主 机真实ip 
{"insecure-registries":["宿主机ip:5000"]} 

# 5、重启docker 服务 
systemctl restart docker 

docker start registry

访问: http://192.168.12.132:5000/v2/_catalog

20.2 将镜像上传至私有仓库
# 1、标记镜像为私有仓库的镜像 
# 语法: docker tag jdk1.8 宿主机IP:5000/jdk1.8
docker tag jdk1.8 192.168.12.132:5000/jdk1.8

# 2、再次启动私有仓库容器 
docker restart registry 

# 3、上传标记的镜像到私有仓库
# 语法: docker push 宿主机IP:5000/jdk1.8 
docker push 192.168.12.132:5000/jdk1.8

# 4、输入网址查看仓库效果
20.3 从私有仓库拉取镜像

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

# 因为私有仓库所在的服务器上已经存在相关镜像;所以先删除;请指定镜像名,不是id 
# 语法: docker rmi 服务器ip:5000/jdk1.8
docker rmi 192.168.12.132:5000/jdk1.8

# 拉取镜像 
# 语法: docker pull 服务器ip:5000/jdk1.8
docker pull 192.168.12.132:5000/jdk1.8

#可以通过如下命令查看 docker 的信息;了解到私有仓库地址 
docker info

21、总结

1)Docker概念

​ 1.1 Docker是Go语言写的开源的容器引擎。

​ 1.2 Docker 比 VMWare技术更加 小、快、移植方便。

2)Docker命令(重点)

​ 2.1 Docker镜像命令

​ docker images: 查看本地所有镜像

​ docker search: 到中央仓库搜素镜像

​ docker pull : 拉取镜像

​ docker rmi: 删除本地镜像

​ 2.2 Docker容器命令

​ docker ps -a/-l : 查看容器的状态

​ docker run -it / -di / -v:创建交互式/守护式容器 ,同时挂载文件/目录

​ docker start/stop/restart :启动/停止/重启容器

​ docker rm :删除容器

​ docker inspect:查看容器的内部IP

​ docker cp:在宿主机和容器之间拷贝文件

​ 2.3 使用Docker安装mysql、tomcat、nginx完成spirngboot+vueJS项目部署

3)了解Docker高级用法

​ 3.1 容器的备份与移植

​ 3.2 Dockerfile制作一个Docker镜像

​ 3.3 搭建企业内部的Docker私服

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

淋雨一直走~

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值