docker入门与实战

环境准备

本文以centos7 虚拟机进行演示

  • 一台Linux机器 能连接外网
  • 关闭seLinux
vi /etc/selinux/config
# 将 SELINUX=enforcing 改为 SELINUX=disabled
  • 需要重启机器 selinux配置才会生效
  • 关闭防火墙
systemctl stop firewalld.service

docker的安装与自启动

配置国内yum源镜像

cd /etc/yum.repos.d
# 备份
mv CentOS-Base.repo CentOS-Base.repo.bak
# 如果wget不存在请先安装  yum install -y wget
wget -O CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 下载阿里云docker社区版 yum源 (地址可能发生改变请自行搜索)
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装docker

# 搜索docker相关的安装包
yum list | grep docker
# 安装社区版Docker
yum install -y docker-ce.x86_64
# 启动docker
systemctl start docker
# 查看docker安装是否成功(1查看版本)
docker version
# (查看docker详细信息)
docker info
# 开机自启动
systemctl enable docker

配置docker镜像加速

sudo mkdir -p /etc/docker
# 创建文件 daemon.json 内容如下,后面的url根据每个人的阿里云账号不同而不同
{
  "registry-mirrors": ["https://5uik4gl01.mirror.aliyuncs.com"]
}
# 重新载入docker的配置
sudo systemctl daemon-reload
sudo systemctl restart docker

docker 的基本操作命令

镜像操作

# 查看本地镜像
docker images
# 搜索远程仓库镜像(本例 搜索centos 相关镜像)
docker search centos
# 搜索官方镜像
docker search --filter "is-official=true" centos
# 条件搜索镜像星大于20
docker search --filter stars=20 centos
# 从远程仓库拉去镜像
docker pull centos:7
# 镜像改名
docker tag centos:7 mycentos:v1
# 删除镜像
docker rmi mycentos:v1

容器操作

# 启动容器 
# -i :表示以交互模式运行容器(让容器的标准输入保持打开)
# -d:表示后台运行容器,并返回容器ID
# -t:为容器重新分配一个伪输入终端
# --name:为容器指定名称
docker run -itd --name=mycentos centos:7
# 查看本地所有的容器
docker ps -a
# 查看本地正在运行的容器
docker ps 
# 停止容器 docker stop 容器id 或 容器名字
docker stop mycentos
# 停止所有容器
docker stop $(docker ps -aq)
# 启动容器 docker start 容器id 或 容器名字
docker start mycentos
# 重启容器 docker restart 容器id 或 容器名字
docker restart mycentos
# 删除容器(不能删除正在运行的容器) docker rm 容器id 或 容器名字
# -f 参数(强制删除) docker rm -f 容器id 或 容器名字
docker rm mycentos
# 查看当前容器详细信息(挂在的卷,网络等)docker inspect 容器id 或 容器名字
docker inspect mycentos
# 进入容器 docker exec -it 容器id 或者 容器名字 解释器
docker exec -it mycentos /bin/bash

docker容器与宿主机文件复制与挂载

# 从宿主机拷贝文件到容器: docker cp 宿主机本地路径 容器名字/ID:容器路径
docker cp /root/test.txt mycentos:/home/test3.txt
# 从容器复制到宿主机 :docker cp 容器名字/ID:容器路径 宿主机本地路径
docker cp mycentos:/home/index.html /root/
# 宿主机文件夹挂载到容器里:docker run -itd -v 宿主机路径:容器路径 镜像
docker run -itd -v /root/file/:/home/file centos:7

docker 自定义镜像

意义在于,保存搭建好的环境和软件运行环境,防止容器删除后,新建容器重复操作。

方法1 命令方式 docker commit 制作镜像

# docker commit 容器id 目标镜像名:目标镜像tag
# -a 标注作者
# -m 添加注释
docker commit -a 'xiaoming' -m "注释" 2cd345053899 newImageName:newImageTag

方法2 Dockerfile构建镜像

最简例子

# this is a dockerfile
FROM centos:7
MAINTAINER xiaoming xiaoming@123.com
RUN echo "正在构建镜像!!!"
WORKDIR /home/file
COPY myfile.txt /home/file
RUN yum install -y net-tools

dockerfile 基础指令

  • FROM 基于哪个镜像
  • MAINTAINER 注明作者
  • COPY 复制文件进入镜像(只能用相对路径)
  • ADD 复制文件进入镜像(假如文件是 tar.gz 还会解压)
  • WORKDIR 指定工作目录,路径不存在会新建
  • ENV 设置环境变量
  • EXPOSE 暴露容器端口
  • RUN 在构建镜像的时候执行,作用于镜像层面
  • ENTRYPOINT 在容器启动的时候执行,作用于容器层。如果一个dockerfile中有多条只允许执行最后一条
  • CMD 在容器启动的时候执行,作用于容器层,dockfile里有多条时只允许执行最后一条。 容器启动后执行默认的命令或者参数,允许被修改
# shell 命令格式
RUN yum install -y net-tools
# exec 命令格式
RUN [ "yum","install" ,"-y" ,"net-tools"]

dockerfile 实战

构建nginx
1-下载安装包
# 下载nginx安装包
wget http://nginx.org/download/nginx-1.16.1.tar.gz

2-编写dockerfile
FROM centos:7
ADD nginx-1.16.1.tar.gz /usr/local
WORKDIR /usr/local/nginx-1.16.1/
RUN yum install -y gcc gcc-c++ make pcre pcre-devel zlib zlib-devel
RUN sh configure --prefix=/usr/local/nginx && make && make install
EXPOSE 80
3-制作镜像
docker build -t mycentos:nginx .
4-使用镜像启动容器
# nginx 默认是以后台进程启动,所以退出容器时候,nginx程序也会随着停止,所以使用前台方式启动nginx /usr/local/nginx/sbin/nginx -g "daemon off;
docker run -itd --name=mynginx -p 80:80 mycentos:nginx /usr/local/nginx/sbin/nginx -g "daemon off;"
5-访问宿主机的映射端口(80)验证

构建redis
1-下载安装包
# 下载redis安装包
wget http://download.redis.io/releases/redis-5.0.5.tar.gz

2-编写dockerfile
FROM centos:7
ADD redis-5.0.5.tar.gz /usr/local
WORKDIR /usr/local/redis-5.0.5/
RUN yum install -y gcc gcc-c++ make openssl openssl-devel
RUN make && make PREFIX=/usr/local/redis install
RUN mkdir -p /usr/local/redis/conf/
RUN cp /usr/local/redis-5.0.5/redis.conf /usr/local/redis/conf/
# 保证出本机外的ip能访问redis
RUN sed -i '69s/127.0.0.1/0.0.0.0/' /usr/local/redis/conf/redis.conf
RUN sed -i '88s/protected-mode yes/protected-mode no/' /usr/local/redis/conf/redis.conf
ENTRYPOINT /usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf
3-制作镜像
docker build -t mycentos:redis .
4-使用镜像启动容器
# redis 默认就是前台启动 宿主机端口:容器端口
docker run -itd --name=myredis -p 6379:6379 mycentos:redis
5-验证

验证方式很多,可用redis桌面客户端连接到此redis服务器, 在容器内与桌面同时操作redis

#关闭宿主机防火墙
systemctl stop firewalld
# 进入容器
docker exec -it mycentos:redis /bin/bash
# 用容器redis本地客户端连接redis 不加任何参数连接的是 127.0.0.1:6379
[root@ea0ebf2ef7a1 src]# /usr/local/redis-5.0.5/src/redis-cli
127.0.0.1:6379> set name xiaoxiao
OK
127.0.0.1:6379> get name
"xiaoxiao"
127.0.0.1:6379> 

在这里插入图片描述

构建mysql5.7
1-拉去 mysql 镜像包
# 拉去镜像 (记得配置镜像加速,否则拉包速度非常慢)
docker pull mysql:5.7

2-编写dockerfile
# 准备初始化sql init.sql
-- 建库
create database `db_mall`;
SET character_set_client = utf8mb4;
use db_mall;

-- 建表
drop table if exists `user`;
CREATE TABLE user (
id int(11) NOT NULL AUTO_INCREMENT COMMENT '用户id',
name varchar(50) NOT NULL COMMENT '用户名',
age tinyint default null comment '年龄',
phone_num varchar(20) NOT NULL DEFAULT '' COMMENT '用户手机号',
sex varchar(10)  NOT NULL DEFAULT '' COMMENT '性别',
PRIMARY KEY (id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';

-- 插入数据
insert into user values('1','小明','15','123456','男');
insert into user values('2','小红','13','234567','女');
FROM mysql:5.7
# 官方镜像说明在此目录下的sql文件会被初始化执行
WORKDIR /docker-entrypoint-initdb.d
# 设置字符集,否则容器不能输入中文,也不能插入中文
ENV LANG=C.UTF-8
ADD init.sql .
3-制作镜像
docker build -t mycentos:mysql .
4-使用镜像启动容器
docker run --name=mymysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mycentos:mysql
5-桌面客户端连接测试

在这里插入图片描述

docker 镜像的导入导出

使用镜像导入导出

#--------------------导出---------------------
# docker save 镜像id 或者 镜像名字 -o 输出的问题(最好加绝对路径)
docker save mycentos:mysql -o /root/my-mysql.tar
# 或
docker save mycentos:mysql > /root/my-mysql.tar
#--------------------导入---------------------
docker load -i my-mysql.tar

使用容器导入导出

#--------------------导出---------------------
# docker export 容器id 或者 容器名字 -o 输出的问题(最好加绝对路径)
docker export myredis -o /root/my-myredis.tar
#--------------------导入---------------------
docker import my-myredis.tar

总结

本文主要介绍了docker的安装,基本命令,镜像的打包,导出导出实战内容。

©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页