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

什么是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          133MB

cat /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 FOREGROUND

docker 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 基于本地模块

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值