什么是Docker

docker是在linux容器中运行的开源工具,是一种轻量级的虚拟机。docker设计的宗旨是,通过应用组件的封装、发布、部署、运行等生命周期的管理,达到组件级别的“一次封装,到处运行”的目的。这里的组件,可以看成一个完整的操作系统。

docker的应用场景:

解决开发人员和运维人员之间的协作关系,加快应用交付速度
以支持大规模的分布系统的水平扩展,真正给企业开发带来福音## docker的
能实现把需要的服务器从腾讯云迁移到阿里云

优缺点:

特点 Docker容器 虚拟机
启动速度 秒级 分钟级
计算能力耗损 几乎无 耗损50%左右
性能 接近原生 弱于
系统支持量(单机) 上千个 几十个
隔离性 资源限制 完全隔离

docker的三大核心概念:镜像、容器、仓库。

镜像

Docker是创建容器的基础类似于虚拟机的快照。

容器

容器是从镜像创建的运行实例、可以被启动停止和删除

仓库

Docker是集中存放镜像的地方

实操一

安装docker容器

安装环境:centos 7.4

yum -y install yum-utils device-mapper-persistent-data lvm2
cd /etc/yum.repos.d/
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum -y install docker-ce
systemctl start docker.service
systemctl enable docker.service
docker version      ##看docker的版本信息下面是安装获取镜像的过程
*************************************镜像加速不需要************
tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://7k2y.mirror.aliyuncs.com"]
}
EOF
************************************************************
vim /etc/sysctl.conf
net.ipv4.ip_forward=1          ##优化
sysctl -p
systemctl restart network
systemctl reload docker
systemctl restart docker
docker pull nginx   ##获取nginx的镜像
docker search nginx ##查看官网上有哪些nginx的镜像
[root@localhost yum.repos.d]# docker images
名称          便签          镜像id              什么时候创建的          镜像大小
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              c39a868aad02        3 days ago          133MBcat /var/lib/docker/image/overlay2/repositories.json
可以查看具体的下载文件信息

知识点:获取镜像信息添加镜像标签

docker inspect c39a868aad02  ##后面跟的是镜像的ID
[root@localhost overlay2]# docker tag nginx:latest nginx:webb ##为nginx添加一个新的标签webb
[root@localhost overlay2]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              c39a868aad02        3 days ago          133MB
nginx               webb                c39a868aad02        3 days ago          133MB
[root@localhost overlay2]# docker images |grep nginx
nginx               latest              c39a868aad02        3 days ago          133MB
nginx               webb                c39a868aad02        3 days ago          133MB
[root@localhost overlay2]# docker rmi nginx:webb   ##删除标签
Untagged: nginx:webb
[root@localhost overlay2]# docker images |grep nginx
nginx               latest              c39a868aad02        3 days ago          133MB

注意:删除标签仅剩下一个的时候就不要删了,在删的话就会把镜像删除,另外当镜像存在两个标签的时候不能直接通过删id删除镜像。

知识点:镜像的存出和删除和载入

docker save -o /opt/nginx nginx:latest   ##存出镜像相当备份一样
docker rmi c39a868aad02         ##删除镜像
docker load < /opt/nginx     ##载入镜像相当于恢复
或者用docker --input /opt/nginx        恢复

知识点:创建容器,查看容器
创时:-i指的是标准输入-t是让docker分配一个伪终端

[root@localhost opt]# docker create -it nginx:latest /bin/bash
d22ad9d458af8feec78bf6b847bfb0fc41306c0e7e019b30c9bc33379dce6014
[root@localhost opt]# docker ps -a ##-a列出所有
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
d22ad9d458af        nginx:latest        "/docker-entrypoint.…"   36 seconds ago      Created                                 serene_almeida

知识点:开启容器,证明容器无论开不开启都不能直接删除镜像,需先删除容器后才能删除镜像。容器开启时无法删除容器

docker pull centos:7
docker create -it centos:7 /bin/bash
docker start 7e6257c9f8d8   ##开启nginx容器
[root@localhost opt]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
77dc8d519ae9        centos:7            "/bin/bash"              4 minutes ago       Created                                 beautiful_galois
d22ad9d458af        nginx:latest        "/docker-entrypoint.…"   10 minutes ago      Up(开启) 5 seconds        80/tcp              serene_almeida
[root@localhost opt]# docker rmi c39a868aad02
Error response from daemon: conflict: unable to delete c39a868aad02 (cannot be forced) - image is being used by running container d22ad9d458af
[root@localhost opt]# docker rmi 7e6257c9f8d8
Error response from daemon: conflict: unable to delete 7e6257c9f8d8 (must be forced) - image is being used by stopped container 77dc8d519ae9
[root@localhost opt]# docker rm d22ad9d458af   #容器开启时没法删容器
Error response from daemon: You cannot remove a running container d22ad9d458af8feec78bf6b847bfb0fc41306c0e7e019b30c9bc33379dce6014. Stop the container before attempting removal or force remove
[root@localhost opt]# docker stop d22ad9d458af
d22ad9d458af
[root@localhost opt]# docker rm d22ad9d458af
d22ad9d458af
[root@localhost opt]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
77dc8d519ae9        centos:7            "/bin/bash"         11 minutes ago      Created                                 beautiful_galois
[root@localhost opt]# docker rmi c39a868aad02
Untagged: nginx:latest
Deleted: sha256:c39a868aad02a383c7e490e0fc4a5b0217f667f2de764bc2755e315a5adf64a1
Deleted: sha256:1af47386c12cb24b362bd785e71058ab675fbdcbda8e7a7ba0dd10c3cff75a2a
Deleted: sha256:25ee02f9e42f8cdca7ca8bc522cb69ac4a86a55401818a13c7a01e52a81894fe
Deleted: sha256:b1d2bc3292aa3d64794f99d2885d35b454993b4af24ad350a969d27925db7ebb
Deleted: sha256:4216e20d59f9fc90bccdd14493452532806d4803a25514366de2a9c5560624d0
Deleted: sha256:d0fe97fa8b8cefdffcef1d62b65aba51a6c87b6679628a2b50fc6a7a579f764c

知识点:可以直接用一条命令创建镜像,创建容器,并运行容器,但是运行后直接关闭容器 器状态是Exited

[root@localhost opt]# docker run nginx /usr/bin/bash -c ls /
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
bb79b6b2107f: Pull complete
5a9f1c0027a7: Pull complete
b5c20b2b484f: Pull complete
166a2418f7e8: Pull complete
1966ea362d23: Pull complete
Digest: sha256:aeade65e99e5d5e7ce162833636f692354c227ff438556e5f3ed0335b7cc2f1b
Status: Downloaded newer image for nginx:latest
/docker-entrypoint.sh: 38: exec: /usr/bin/bash: not found
[root@localhost opt]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                       PORTS               NAMES
3451e8cbe989        nginx               "/docker-entrypoint.…"   7 seconds ago       Exited (127) 6 seconds ago                       jolly_shtern

上一个操作是有错误的,因为nginx不需要用/usr/bin/bash解决办法如下
正常的结束结果应该是Exited(0)

[root@localhost opt]# docker run nginx /bin/bash -c ls /
[root@localhost opt]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
d9c6651b7506        nginx               "/docker-entrypoint.…"   22 seconds ago      Exited (0) 21 seconds ago 

知识点:测试当用run创建镜像并进入死循环状态时,其会一直出现hello,只有在开一个终端把容器关闭才能停止,且这时候的停止不是为正常状态的停止

[root@localhost ~]# docker run paigeeworld/centos7 /bin/bash -c "while true;do echo hello;done"
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE                 COMMAND                  CREATED              STATUS                      PORTS               NAMES
1deec0730a89        paigeeworld/centos7   "/bin/bash -c 'while…"   About a minute ago   Up About a minute                               hungry_shockley
d9c6651b7506        nginx                 "/docker-entrypoint.…"   46 minutes ago       Exited (0) 46 minutes ago                       trusting_bose
[root@localhost ~]# docker stop 1deec0730a89
1deec0730a89
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS                        PORTS               NAMES
1deec0730a89        paigeeworld/centos7   "/bin/bash -c 'while…"   2 minutes ago       Exited (137) 12 seconds ago 

知识点:进入容器,退出容器,容器导出,删除容器,容器导入(注意容器导入时会生成镜像不会创建容器) 批量删除脚本不会删掉正在运行的容器,用这个特性可以筛选出运行的容器,删不用容器

[root@localhost opt]# docker ps -a
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS               NAMES
fbc4997954bb        nginx:latest          "/docker-entrypoint.…"   12 minutes ago      Created                                 clever_wing
1deec0730a89        paigeeworld/centos7   "/bin/bash -c 'while…"   28 minutes ago      Up 11 minutes                           hungry_shockley
[root@localhost ~]# docker exec -it 1deec0730a89 /bin/bash
bash-4.2# exit
exit
[root@localhost ~]# docker export 1deec0730a89 > /opt/nginx_c
[root@localhost opt]# docker rm 1deec0730a89  ##删除
1deec0730a89
[root@localhost opt]# mv nginx_c centos7_c ##改名
[root@localhost opt]# cat centos7_c | docker import - paigeeworld/centos7:latest
sha256:ce7bcd00ef6d7dc586183c3e88b123ee16bbe5f0d90ce8ef1d3589699e18eb88
[root@localhost opt]# docker ps -a ##查看一下
[root@localhost opt]# docker images    ##查看创建的镜像
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
paigeeworld/centos7   latest              ce7bcd00ef6d        3 minutes ago       355MB
centos                7                   09fd2f9e071b        7 minutes ago       0B
nginx                 latest              c39a868aad02        3 days ago          133MB
paigeeworld/centos7   <none>              4cbe7aa905e7        6 years ago         382MB[root@localhost opt]# docker ps -a |awk '{print "docker rm "$1}' |bash    ##批量删除容器脚本
Error: No such container: CONTAINER
d6dbbc749b42
fbc4997954bb
[root@localhost opt]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

实操二:Docker创建镜像

镜像:应用发布的标准格式,支撑一个Docker容器的运行

基于已经有镜像创建

将容器里面运行的程序及运行环境打包生成新的镜像
docker commit [选项] 容器ID/名称 仓库名称:[标签]
-m 说明信息
-a 作者信息
-p 生成过程中停止容器的运行

[root@localhost opt]# docker create -it centos:7 /bin/bash
8d5566c344a54f8c9a452009907c6c9e75b6402e65c551002c53ac34865b458d
[root@localhost opt]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
8d5566c344a5        centos:7            "/bin/bash"         3 seconds ago       Created                                 nice_dubinsky
[root@localhost opt]# docker commit -m "new" -a "daokes" 8d5566c344a5 daokes:test
sha256:53ba842ca996e9cc44c47c82ac3a53c5bc8a39b6ee5951cb7795912e6cd8ca9d
[root@localhost opt]# docker images |grep daokes
daokes                test                53ba842ca996        15 seconds ago      203MB

基于本地模块创建

通过导入操作系统模板文件生成新的镜像
使用wget命令导入为本地镜像
wget http://download.openvz.org/template/precreated/debian-7.0-x86-minimal.tar.gz
导入成功后可查看本地镜像信息
docker images |grep new

wget https://download.openvz.org/template/precreated/debian-7.0-x86-minimal.tar.gz  ##一般先下载好后再传到opt 在运行
[root@localhost opt]# cat debian-7.0-x86-minimal.tar.gz | docker import - daokes:new
sha256:ea6866d81fa7c08c1f7d07d1fd35ba484791d1dbd5dce53ade205e5ffa890a20
[root@localhost opt]# docker images|grep daokes
daokes              new                 ea6866d81fa7        2 minutes ago       215MB

基于Dockerfile创建

Dockerfile是由一组指令组成的文件
Dockerfile结构四部分
基于镜像信息
维护者信息
镜像操作指令
容器启动时执行指令
Dockerfile每行支持一条指令,每条指令可携带多个参数,支持使用以“#”号开头的注释
注意:每创建一个制作镜像的时候中间会生成容器,执行的时候在一步步的删除后 在创建最后生成的才是你需要的 也就是说创建过程中会产生一个临时的容器,创建完后会被remove掉,并且保留你中间出错的指令。
先删除所有的镜像

mkdir apache
cd apache/
vim Dockerfile
FROM centos:7   ##基于的基础镜像
MAINTAINER lai  ##维护镜像的用户信息
RUN yum -y update   ##静像超作指令安装Apache
RUN yum -y install httpd
EXPOSE 80       ##开80端口
ADD index.html /var/www/html/index.html ##复制网站首页文件
ADD run.sh /run.sh  ##将执行脚本复制到镜像中
RUN chmod 755 /run.sh
CMD [ "/run.sh" ] ##启动容器时执行脚本vim index.html
<h1>this is my http</h1>vim run.sh
#!/bin/bash
rm -rf /run/httpd/*
exec /usr/sbin/apachectl -D FOREGROUNDdocker build -t httpd:centos .
Successfully built 9c1babec53b9
Successfully tagged httpd:centos
[root@localhost apache]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
httpd               centos              9c1babec53b9        13 seconds ago      419MB
centos              7                   7e6257c9f8d8        3 months ago        203MB
[root@localhost apache]# docker run -d -p 1216:80 httpd:centos
081c5795f2e75875ed1ebd00f5bb57c82cce6f616e2df102af433e9795ca53fa
开启对外的映射在浏览器上测试

关键字

docker images ---------------------------------------------------------看所有镜像
docker rmi nginx:web-------------------------------------------------删标签
docker save -o /opt/nginx nginx:latest -------------------------- 载出
docker load < /opt/nginx ---------------------------------------------载入
docker create -it nginx:latest /bin/bash ---------------------------创容器
docker ps -a ------------------------------------------------------------看容器
docker run nginx /bin/bash -c ls / ---------------------------------- 一键部署测试
docker exec -it 1deec0730a89 /bin/bash ------------------------入容器
exit
docker export 1deec0730a89 > /opt/nginx_c ------------------容器载出
docker ps -a |awk ‘{print "docker rm "$1}’ -----------------------批量删容器
docker commit -m “new” -a “daokes” -----------------------------基于已有镜像的
cat debian-7.0-x86-minimal.tar.gz | docker import - daokes:new 基于本地模块

Is it going on-------------Docker容器的安装以及基本的操作指令相关推荐

  1. Docker(三):镜像导入与导出、保存与加载、在Docker容器中安装软件

    相关阅读: Docker(一):Docker的安装与常用命令 Docker(二):Docker常用命令之镜像的创建:Dockerfile 与 commit Docker(三):Docker镜像导入与导 ...

  2. 解决Docker容器内安装chrome浏览器无法启动bug

    前言 之前有写过一个基于Ubuntu20.04 的Docker容器的可视化Dockerfile,当时默认火狐浏览器,今天要测试一个项目就run了一个可视化容器,但是我需要用到chrome浏览器,于是乎 ...

  3. 宝塔面板安装docker 再到docker容器里面安装宝塔

    我的服务器宝塔版本是7.9 一.docker安装 点击Docker管理器后面的安装就行 二.创建docker容器 点击设置 获取一个系统镜像 以centos:7 为例 点击获取镜像 可能有点慢 想要快 ...

  4. docker容器中安装vim

    docker容器中安装vim 在使用docker容器时,容器一般没有安装vim,就需要安装vim apt-get install vim命令用于安装vim,但是下载过慢. 第一步 配置国内镜像源 进入 ...

  5. docker容器中安装vim 、telnet、ifconfig, ping命令

    在使用docker容器时,有时候里边没有安装vim,敲vim命令时提示说:vim: command not found,这个时候就需要安装vim,可是当你敲apt-get install vim命令时 ...

  6. 解决:bash: vim: command not found、docker 容器不识别 vi / vim 、docker 容器中安装 vim

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 1. 在 Docker 容器中编辑文件,报错如下: bash: vim: command not f ...

  7. 容器安装java_在docker容器中安装Java(从宿主机向docker容器中拷贝文件)

    操作系统 [root@Optimus /]# uname -a Linux Optimus 2.6.32-504.el6.x86_64 #1 SMP Wed Oct 15 04:27:16 UTC 2 ...

  8. docker容器内安装ifconfig netstat ping vim 等测试工具的方法

    首先,确保docker容器能联网 ① centos使用yum进行安装 ② Ubuntu/debian等使用apt-get进行安装 安装ifconfig.netstat命令 apt-get instal ...

  9. Ubuntu在docker容器中安装TensorFlow-1.5

    本文部分参考https://blog.csdn.net/u013948858/article/details/78429954 注意以下操作在64位Ubuntu16.04或14.04下进行,不支持32 ...

最新文章

  1. IT男人必学的20大泡妞妙招
  2. getBoundingClientRect()方法
  3. 模拟电路技术之基础知识(八)
  4. 数字原生,创新生长|企业如何打造数字创新的“飞天梦”?
  5. TRY NOT TO SAY SO MUCH!
  6. JSR-308和Checker框架为jOOQ 3.9添加了更多类型安全性
  7. 三年级计算机课画曲线,三年级上册信息技术曲线工具教案
  8. Echart 地图实例
  9. 《Oracle数据库管理与维护实战》——1.2 Oracle各版本异同
  10. 帆软查询前后鼠标进入到某个位置隐藏或显示参数面板
  11. vue+webpack5项目中全局引入scss
  12. Android仿微信源码下载
  13. java word文件转图片
  14. open-drain和push-pull的上拉速度
  15. 凸优化1——仿射集、凸集、锥
  16. 完美池宇峰畅谈创业点滴 男怕入错行
  17. 微信小程序canvas绘制图片真机不显示问题
  18. PHP如何把三张图片均匀分布,C++ uniform_real_distribution连续均匀分布类模板用法详解...
  19. np.array数组的切片
  20. 为用户提供确定性——互联网平台建设

热门文章

  1. 君澜入驻上饶,打造动物主题休闲度假体验
  2. 给图片加水印--手把手教新码农如何把技术变成产品
  3. 原生PHP上传图片并且裁剪图片生成推广海报
  4. 适合大学生查答案的公众号
  5. 后ETC时代,年入近百亿元的千方科技如何玩转车路协同
  6. 7-66 华氏温度转换为摄氏温度
  7. 邮件服务器(eas)找不到服务器,Exchange ActiveSync 无法访问邮箱服务器上的邮箱,因为邮箱服务器处于脱机状态...
  8. 身份证最后一位校验码
  9. 响应式织梦模板玩具动漫类网站
  10. 【案例分享】某银行用这20件事,实现数字化转型