docker简介及安装操作 小白必看

一、docker简介

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

一个完整的Docker有以下几个部分组成:

1、DockerClient客户端
2、Docker Daemon守护进程
3、Docker Image镜像
4、DockerContainer容器

1.1 docker使用场景

打包应用程序简化部署、可脱离底层硬件任意迁移

1.2 和虚拟机的区别

虚拟机容器
资源资源多资源少
开启时间30-60s毫秒
安全系统安全内核共享
弹性扩展执行时间长执行时间短

1.3 docker核心概念

镜像:一个面向docker容器引擎的只读模板
容器:从镜像创建的运行实例
仓库:集中保存镜像的地方

二、安装docker及docker的操作

#安装依赖包
[root@localhost ~]# yum -y install yum-utils device-mapper-persistent-data lvm2
device-mapper存储驱动程序需要device-mapper-persistent-data lvm2
device-mapper时内核种逻辑卷管理的通用设备映射机制

设置阿里云镜像源
[root@localhost yum.repos.d]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装doctor-ce
问题
错误:软件包:containerd.io-1.3.7-3.1.el7.x86_64 (docker-ce-stable)
          需要:container-selinux >= 2:2.74
错误:软件包:3:docker-ce-19.03.13-3.el7.x86_64 (docker-ce-stable)
          需要:container-selinux >= 2:2.74
 您可以尝试添加 --skip-broken 选项来解决该问题
 您可以尝试执行:rpm -Va --nofiles --nodigest

解决
wget http://mirror.centos.org/centos/7/extras/x86_64/Packages/container-selinux-2.107-1.el7_6.noarch.rpm
rpm -ivh container-selinux-2.107-1.el7_6.noarch.rpm --nodeps --force
然后再次安装docker
yum -y install docker-ce
然后systemctl start启动服务

做阿里云容器镜像服务加速地址
先cd /etc/docker
然后写入
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://wnd6z0yl.mirror.aliyuncs.com"]
}
EOF
之后重载系统参数,重启服务
[root@localhost docker]# systemctl daemon-reload
[root@localhost docker]# systemctl restart docker
添加路由转发功能,网络优化
[root@localhost docker]# vi /etc/sysctl.conf 
net.ipv4.ip_forward=1
刷入刚刚修改的参数
[root@localhost docker]# sysctl -p
net.ipv4.ip_forward = 1
然后重启网络
[root@localhost docker]# systemctl restart network
重启docker
[root@localhost docker]# systemctl restart docker

——————————————————————
docker镜像命令
#查看版本
[root@localhost docker]# docker version
  Version:          19.03.13
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.13.15

#搜索上传的共享镜像
[root@localhost docker]# docker search nginx
NAME                               DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
nginx                              Official build of Nginx.                        13981               [OK]                
jwilder/nginx-proxy                Automated Nginx reverse proxy for docker con…   1906                                    [OK]

#下载镜像
[root@localhost docker]# docker pull nginx

#查看下载镜像信息
[root@localhost docker]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              c39a868aad02        3 days ago          133MB

#获取镜像详细信息
[root@localhost docker]# docker inspect c39a868aad02 

#添加新的标签
[root@localhost docker]# docker tag nginx:latest nginx:web
[root@localhost docker]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              c39a868aad02        3 days ago          133MB
nginx               web                 c39a868aad02        3 days ago          133MB

#删除镜像
[root@localhost docker]# docker rmi nginx:web
Untagged: nginx:web
[root@localhost docker]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              c39a868aad02        3 days ago          133MB
#如果用id删除不是最后一个id删除不掉会报错

#镜像导出
[root@localhost docker]# docker save -o /opt/nginx nginx:latest
[root@localhost docker]# ls -lh /opt
总用量 131M
drwx--x--x  4 root root   28 11月  9 19:10 containerd
-rw-------  1 root root 131M 11月  9 19:44 nginx
drwxr-xr-x. 2 root root    6 3月  26 2015 rh

#载入镜像
[root@localhost docker]# docker load < /opt/nginx
Loaded image: nginx:latest
——————————————————————————
docker容器命令
#创建容器
[root@localhost docker]# docker create -it nginx
-i:让容器标准输入保持打开,-t:让Docker分配一个伪终端

#查看容器状态
[root@localhost docker]# docker ps -a
-a:列出所有容器,包括未运行的容器
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS               NAMES
a2b43ec21404        nginx               "/docker-entrypoint.…"   38 seconds ago       Created                                 dazzling_black

#启动容器
[root@localhost docker]# docker start a2b43ec21404

#进入容器
[root@localhost docker]# docker exec -it a2b43ec21404 /bin/bash
root@a2b43ec21404:/# 

#退出容器
root@a2b43ec21404:/# exit
exit

#终止容器运行
[root@localhost ~]# docker stop a2b43ec21404 
正常关闭时返回值0,强制关闭时非0值

#容器导出
docker export 容器id/名称 > 文件名

#一次性运算用完即删(会先提示没有该容器然后下载,完成后ls然后关闭)
报错
ERRO[0000] error waiting for container: context canceled 
等待容器的错误:上下文已取消
解决方法
查看格式错误
[root@localhost ~]# docker run paigeeworld/centos7 /usr/bin/bash -c ls /
bin
boot
dev

#删除容器
[root@localhost ~]# docker rm 24a60af986c1 

#批量删除容器
[root@localhost ~]# docker ps -a | awk '{print "docker rm " $1}' | bash
Error: No such container: CONTAINER #第一个删不掉的
30b3a332da60
fe56b0acfae8
786310d4b7f5
0e66c7ab32cd
a2b43ec21404
ebfc16f6c8b6
容器运行时不能删除镜像
镜像在容器里不能删除镜像需要先删除容器才能删除镜像

——————————————————————————
Docker镜像服务
基于容器现有的镜像创建
基于模板创建镜像服务
基于dockerfile创建常用基础服务

#将容器里运行程序及环境打包生成镜像
[root@localhost ~]# docker commit -m aaa -a aaa -p c456e73b9b53 nginx:test
sha256:fd453b642e6d74acf0840fc0ce7baab0450401cf58c48ada23f9db58df50da36
-m:说明信息,-a:作者信息,-p:生成过程中停止容器运行

#通过导入操作系统模板文件生成镜像
[root@localhost ~]# wget http://download.openvz.org/template/precreated/debian-7.0-x86-minimal.tar.gz
--2020-11-09 20:15:50--  http://download.openvz.org/template/precreated/debian-7.0-x86-minimal.tar.gz
正在解析主机 download.openvz.org (download.openvz.org)... 185.231.241.69
正在连接 download.openvz.org (download.openvz.org)|185.231.241.69|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK

※基于dockerfile创建
dockerfile时由一组指令组成文件
四部分:基础镜像信息,维护者信息,镜像操作指令,容器启动时执行指令
dockerfile每行支持一条指令每条指令可携带多个参数,支持使用#开头注释

#dockerfile操作指令
FROM 镜像 :指定新镜像所基于的镜像,第一条指令必须位FROM指令,每创建一个镜像就需要一条FROM指令
MAINTAINER 名字:说明维护人信息
RUN命令:在所基于的镜像上执行命令,并提交新的镜像中。在容器中执行的命令
CMD[运行的程序,参数1,参数2]:指定启动容器时才会执行的指令,如果指定多条只会执行最后一条
EXPOSE:容器对外暴露的端口,并不是映射端口
ENV 环境变量 变量值:设定环境变量,会被后面RUN使用
ADD 源文件/目录 目标文件/目录:将源文件复制到目标文件,源文件要与dockerfile位于相同目录中或一个URL,将宿主机文件放入容器中
COPY 源文件/目录 目标文件/目录:容器内部的文件复制
VOLUME [目录]:数据卷容器,宿主机共享目录出来能够给容器使用,在容器中创建挂载点
USER 用户名/UID:指定容器运行时的用户
WORKDIR 路径:为后续RUN、CMD、ENTRYPOINT指定工作目录,相当于容器内的cd
ONBUILD:指定生成的镜像作为一个基础镜像时所需要运行时的命令
HEATHCECK:健康检查

示例,apache创建
需要创建目录把所有需要丢入容器内的文件放入
[root@localhost ~]# mkdir apache
[root@localhost ~]# cd apache/
创建文件
[root@localhost apache]# vi Dockerfile
FROM centos:7#基于基础镜像
MAINTAINER yuheng#维护镜像信息
RUN yum -y update#更新yum仓库
RUN yum -y install httpd#安装apache
EXPOSE 80#开放对外端口80,容器端口
ADD index.html /var/www/html/index.html#把宿主机html文件复制到容器中生成一个首页
ADD run.sh /run.sh#将宿主机执行脚本放入容器
RUN chmod 755 /run.sh#给一个执行权限
CMD ["/run.sh"]#当容器启动时执行脚本

接下来在apache文件夹中创建放入的两个文件
[root@localhost apache]# vi run.sh
#!/bin/bash
rm -rf /run/httpd/*#如果有apche清空然后执行
exec /usr/sbin/apachectl -D FOREGROUND#强制执行启动apache

[root@localhost apache]# vi index.html
<h1>test</h1>#测试页面

之后就可以构建镜像了
[root@localhost apache]# docker build -t httpd:centos .
#创建过程中一条指令开一次容器,开完之后丢弃。
... ...
Removing intermediate container b02d34cb20fa
 ---> 9959f64340d8
Successfully built 9959f64340d8
Successfully tagged httpd:centos

#容器端口开放了80宿主机需要做映射进行访问,这里映射的是666端口
[root@localhost apache]# docker run -d -p 666:80 httpd:centos
7478bc7705412b5f903b2b6d4284458e4bc3390c1dc4f363983db86ca0812936
7478bc770541        httpd:centos        "/run.sh"                38 seconds ago      Up 37 seconds       0.0.0.0:666->80/tcp   gifted_lamport

之后网页测试访问20.0.0.40:666,测试成功就完成了
进入查看镜像会有两个,因为是基于基础镜像创建的自定义镜像


FROM centos:7
MAINTAINER mysql
RUN yum -y install \
ncurses \
ncurses-devel \
bison \
cmake \
make \
gcc \
gcc-c++
RUN useradd -s /sbin/nologin mysql
ADD mysql-boost-5.7.20.tar.gz /usr/local/
WORKDIR /usr/local/
WORKDIR /usr/local/mysql-5.7.20
RUN cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-DSYSTEMD_PID_DIR=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8  \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=boost \
-DWITH_SYSTEMD=1 && make && make install
RUN chown -R mysql:mysql /usr/local/mysql/
RUN rm -rf /etc/my.cnf
ADD my.cnf /etc
RUN chown mysql:mysql /etc/my.cnf
ENV PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
ENV export PATH
EXPOSE 3306
RUN source /etc/profile
WORKDIR /usr/local/mysql
RUN bin/mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data
RUN cp usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
RUN systemctl start mysqld &
RUN systemctl enable mysqld
CMD ["init"]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值