docker和容器的关系

-Docker是完整的一套容器管理系统

-Docker提供了一组命令, 让用户更加方便直接地使用容器技 术,而不需要过多关心底层内核技术

一.Docker的安装

1.配置环境变量

-需要64位操作系统

-至少RHEL6.5以上的版本,强烈推荐RHEL7(主要是因为内核限制,3.1以上即可)

-关闭防火墙(不是必须的)

2.docker的安装

1)安装前检查

# 检查内核与linux版本
~]# hostnamectlStatic hostname: VM-0-51-centosIcon name: computer-vmChassis: vmMachine ID: 35b12e3f2e994abebdafc2f42fe653dfBoot ID: 816a7c7dd74a48b69fc74b0330106201Virtualization: kvmOperating System: CentOS Linux 7 (Core)CPE OS Name: cpe:/o:centos:centos:7Kernel: Linux 3.10.0-1127.19.1.el7.x86_64Architecture: x86-64
​
# 开启路由转发
~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
~]# sysctl -p
​
## 运用阿里的yum源安装
# 下载yum配置
~]#wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 刷新并安装
~]# yum clean all && yum repolist && yum makecache

注:因为容器里有一块网卡docker0,如果eth0不设置路由转发的话,他们之间也就无法转发通信

2)安装Docker

# 查看最新版本并安装
~]# yum list docker-ce --showduplicates | sort -r
~]# yum install -y docker-ce
​
# 安装成功后,使用docker version命令查看是否安装成功,安装成功后------如下
~]# docker version
Client:Version:      17.05.0-ceAPI version:  1.29Go version:   go1.7.5Git commit:   89658beBuilt:        Thu May  4 22:06:25 2017OS/Arch:      linux/amd64
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

或则下载安装包安装

安装包官方地址:Index of linux/static/stable/x86_64/

## 可以先下载到本地,然后通过ftp工具上传到服务器上,或者在服务器上使用命令下载
~]# wget https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz# 解压
~]# tar -zxvf docker-18.06.3-ce.tgz# 将解压出来的docker文件复制到 /usr/bin/ 目录下
~]# cp docker/* /usr/bin/#  在/etc/systemd/system/目录下新增docker.service文件,内容如下,这样可以将docker注册为service服务
~]# vim /etc/systemd/system/docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd --selinux-enabled=false --insecure-registry=127.0.0.1
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s[Install]
WantedBy=multi-user.target# 此处的--insecure-registry=127.0.0.1(此处改成你私服ip)设置是针对有搭建了自己私服Harbor时允许docker进行不安全的访问,否则访问将会被拒绝。## 启动docker
# 给docker.service文件添加执行权限
~]# chmod +x /etc/systemd/system/docker.service # 重新加载配置文件(每次有修改docker.service文件时都要重新加载下)
~]# systemctl daemon-reload
​

3)启动容器

~]# systemctl start docker.service
​
# 验证安装是否成功(有client和service两部分表示docker安装启动都成功了)
~]# docker version
Client: Docker Engine - CommunityVersion:           18.09.9API version:       1.39Go version:        go1.11.13Git commit:        039a7df9baBuilt:             Wed Sep  4 16:50:02 2019OS/Arch:           linux/amd64Experimental:      false
​
Server: Docker Engine - CommunityEngine:Version:          18.09.9API version:      1.39 (minimum version 1.12)Go version:       go1.11.13Git commit:       039a7df9baBuilt:            Wed Sep  4 16:55:50 2019OS/Arch:          linux/amd64Experimental:     false
​
# 设置开机自启动
~]# systemctl enable docker

二.镜像与容器

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

1.镜像

1)镜像的概述

类似虚拟机的镜像、用俗话说就是安装文件。

 \- 镜像是启动容器的核心

- 在Docker中容器是基于镜像启动的

- 镜像采用分层设计

-使用COW技术(写实复制,最多只能是255层)

写实复制:

Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略

什么是CopyOnWrite容器:

CopyOnWrite容器即写时复制的容器。通俗的理解是当我们往一个容器添加元素的时候,不直接往当前容器添加,而是先将当前容器进行Copy,复制出一个新的容器,然后新的容器里添加元素,添加完元素之后,再将原容器的引用指向新的容器。这样做的好处是我们可以对CopyOnWrite容器进行并发的读,而不需要加锁,因为当前容器不会添加任何元素。所以CopyOnWrite容器也是一种读写分离的思想,读和写不同的容器

注:所以说容器是基于镜像的读写层创建的

2)获取镜像

-官方仓库下载或自己制作

-官方仓库

Docker Hub

# 如果下不了国外的镜像也可以设置国内的(daemon.json文件需自己创建)
~]# vim /etc/docker/daemon.json
{"registry-mirrors": ["https://registry.docker-cn.com", "http://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn"]}
~]# systemctl restart docker.service
# 重启生效

3)镜像的管理命令

命令 作用 概述
docker images 查看镜像
docker search 关键字 查找镜像 默认查看国外的
docker pull 镜像名称 下载镜像
docker push 镜像名称:镜像标签 仓库地址
docker save 镜像名称:镜像标签 -o 文件名(tar 格式) 备份镜像(导出镜像)
docker load -i 备份文件名称(.tar) 恢复镜像(导入镜像)
docker inspect 镜像名称:镜像标签 查看镜像详细信息
docker history 镜像名称:镜像标签 查看镜像的层(制作历史)
docker tag 镜像名称:镜像标签 (旧的) 镜像名称:镜像标签(新得) 给镜像添加新的名称和标签
docker rmi 镜像名称:镜像标签 删除镜像 要先停止容器

4)示例

# 查找镜像(默认从官网找)
~]# docker search centos
NAME        DESCRIPTION                  STARS               OFFICIAL            AUTOMATED
centos   The official build of CentOS.   6963                [OK]
ansible/centos7-ansible  Ansible on Centos7          135                                     [OK]
consol/centos-xfce-vnc            Centos container with "headless" VNC session…   132                                     [OK]
# 下载镜像
~]# docker pull centos
.....
Status: Downloaded newer image for centos:latest
​
# 上传镜像
~]# docker push centos:latest 仓库地址
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
镜像的名字 镜像的简单描述 镜像被点赞的次数 代表是否是由官方提供的
## 备份镜像
# 用标签
~]# docker save centos:latest -o centos.tar
# 用ID
~]# docker save 5d0da3dc9764 -o centos.tar
​
## 恢复镜像(导入)
~]# docker load -i centos.tar
## 查看镜像
~]# docker iamges
REPOSITORY     TAG          IMAGE ID            CREATED             SIZE
centos         latest       5d0da3dc9764        3 months ago        231MB
REPOSITORY TAG IMAGE ID CREATED SIZE
镜像名称 镜像标签 镜像ID 镜像的创建时间 镜像的大小
## 查看镜像详细信息
# 用标签
~]# docker inspect centos:latest
# 用ID
~]# docker inspect  5d0da3dc9764
.....
# 容器内的配置信息
"Config": {"Hostname": "","Domainname": "","User": "","AttachStdin": false,"AttachStdout": false,"AttachStderr": false,"Tty": false,"OpenStdin": false,"StdinOnce": false,"Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"   # 代表用该镜像启动容器的环境变量],"Cmd": ["/bin/bash"  # 默认的启动命令],"Image": "sha256:f5b050f177fd426be8fe998a8ecf3fb1858d7e26dff4080b29a327d1bd5ba422","Volumes": null,"WorkingDir": "","Entrypoint": null,"OnBuild": null,"Labels": {"org.label-schema.build-date": "20210915","org.label-schema.license": "GPLv2","org.label-schema.name": "CentOS Base Image","org.label-schema.schema-version": "1.0","org.label-schema.vendor": "CentOS"}},
......
## 查看镜像的层
~]# docker history centos:latest
IMAGE         CREATED        CREATED BY                                    SIZE   COMMENT
5d0da3dc9764  3 months ago   /bin/sh -c #(nop)  CMD ["/bin/bash"]          0B
<missing>     3 months ago   /bin/sh -c #(nop)  LABEL org.label-schema.sc… 0B
<missing>     3 months ago   /bin/sh -c #(nop) ADD file:805cb5e15fb6e0bb0… 231MB
# 更改新的名称和标签
~]# docker tag centos:latest centos:myos
~]# docker images
REPOSITORY     TAG             IMAGE ID            CREATED             SIZE
centos         latest          5d0da3dc9764        3 months ago        231MB
centos         myos            5d0da3dc9764        3 months ago        231MB
## 删除镜像
# 直接删除
~]# docker images
REPOSITORY    TAG         IMAGE ID      CREATED             SIZE
centos        latest      5d0da3dc9764  3 months ago        231MB
~]# docker rmi centos  或 docker rmi centos:myos
Untagged: centos:latest
# 如果如器是启动状态则要先停止容器
~]# docker ps -a
CONTAINER ID  IMAGE       COMMAND      CREATED        STATUS       PORTS  NAMES
7e4921f57189  centos:myos "/bin/bash"  38 seconds ago Up 2 seconds  ...   heuristic_benz
~]# docker stop 7e4921f57189
~]# docker rmi centos:myos
# 强制删除(容器的不需要停止,但一些数据会删除,比如数据库容器会损坏表等)
~]# docker rmi -f centos
Untagged: centos:latest

5)镜像的名称和标签的概述

  • 每一个镜像都对应唯一的镜像 id

  • 镜像名称(文件名称)+标签 (路径) ==唯一

  • 每一个镜像都有标签,如果没写就是默认标签 latest

  • 我们在调用镜像的时候,如果没有指定标签也是 latest

2.容器

类似一个轻量级的沙箱,容器是从镜像创建应用运行实例,

可以将其启动、开始、停止、删除、而这些容器都是相互隔离、互不可见的。

1)容器的管理命令

容器的管理命令 说明
docker run -it(d) 镜像名称:标签 启动命令 创建启动并进入容器,后台容器使用参数d
docker ps 查看容器-a所有容器,包含未启动的,-q只显示id
docker rm 容器ID -f强制删除,支持命令重入
docker start|stop|restart 容器id 启动、停止、重启容器
docker cp 本机文件路径 容器id:容器内路径 把本机文件拷贝到容器(上传)
docker cp 容器id:容器内路径 本机文件路径 从容器内拷贝文件到宿主机(下载)
docker inspect 容器ID 查看容器详细信息
docker attach 容器id 进入容器默认进程,推出后关闭默认进程(变相关闭容器)
docker attach 容器id{ctr+p,ctl+q} 进入容器以后,退出容器而不关闭的方法
docker exec -it 容器id 启动命令 进入容器新的进程,推出后容器不会关闭

2)docker run命令参数

docker run 命令

-docker run -参数 镜像名称:镜像标签 启动命令

查看 run的参数

-docker help run

run = 创建+启动+进入

  • 参数 -i,交互式

- 参数 -t,终端

- 参数 -d,后台运行

- 参数 --name 容器名字

示例

# 启动centos 容器,并进入容器
~]# docker run -it centos:latest /bin/bash
~]# exit
#退出后容器自动关闭(使用ctrl+p,Ctrl+q # 使用快捷键退出,保证容器不关闭)
## 启动命令
# 但不知道启动命令时则不写(不写则用默认的)
~]# docker run -it centos
# 当写了启动命令时就不会执行默认的,
# 默认的用处比如应用程序容器nginx,apache等
~]# docker run -it nginx:latest #此时是不可以交互的,直接退出会关闭容器(可以使用快捷键退出,放入后台),但此时多次一举不如直接放入后台
~]# docker run -itd nginx:latest
~]# ps -ef
.....
root     25795 12099  0 16:42 ?        00:00:00 containerd-shim -namespace moby -workdir /var/lib/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/753ff4121bdac92221be

3)示例

## 查看容器
# 查看启动的容器
~]# docker ps# 查看所有容器,包含未启动的
~]# docker ps -a# 只查看启动容器的id
~]# docker ps -q
# 查看所有容器的id
~]# docker ps -aq
## 删除容器
~]# docker ps -a
CONTAINER ID  IMAGE    COMMAND      CREATED         STATUS         PORTS   NAMES
753ff4121bda  centos   "/bin/bash"  45 minutes ago  Up 45 minutes          vigilant_payne
# 正常删除
~]# docker rm 753ff4121bda# 当容器还是启动时则不能正常删除,需停止容器再删除
~]# docker stop 753ff4121bda
~]# docker rm 753ff4121bda# 强制删除(会损坏数据,如运行时的数据库,会损坏表库等)
~]# docker rm -f 753ff4121bda# 删除所有容器
~]# docker rm $(docker stop $(docker ps -aq))
## 启动、停止、重启容器
# 格式 docker start|stop|restart 容器ID|容器名字
~]# docker start  753ff4121bda|vigilant_payne
~]# docker stop  753ff4121bda|vigilant_payne
~]# docker restart 753ff4121bda|vigilant_payne
## 查看容器详细信息
# 格式
~]# docker inspect 容器ID|容器名字
~]# docker inspect vigilant_payne
[
........
"NetworkSettings": {"Bridge": "","SandboxID": "4640bfda49bca0c2fe676cd805150bed1521a8da84f0968f7184ecb9864f1c19","HairpinMode": false,"LinkLocalIPv6Address": "","LinkLocalIPv6PrefixLen": 0,"Ports": {},"SandboxKey": "/var/run/docker/netns/4640bfda49bc","SecondaryIPAddresses": null,"SecondaryIPv6Addresses": null,"EndpointID": "cf4686443b5ccfe73609cdcb6ff3381f944fe84bf9bb96cb02aedbec11881381","Gateway": "172.18.0.1","GlobalIPv6Address": "","GlobalIPv6PrefixLen": 0,"IPAddress": "172.18.0.5","IPPrefixLen": 16,"IPv6Gateway": "","MacAddress": "02:42:ac:12:00:05","Networks": {"bridge": {"IPAMConfig": null,"Links": null,"Aliases": null,"NetworkID": "a98aa42f05e6d61e49409a1411c93dc65db871eec3c0518acab20d42e938a858","EndpointID": "cf4686443b5ccfe73609cdcb6ff3381f944fe84bf9bb96cb02aedbec11881381","Gateway": "172.18.0.1","IPAddress": "172.18.0.5","IPPrefixLen": 16,"IPv6Gateway": "","GlobalIPv6Address": "","GlobalIPv6PrefixLen": 0,"MacAddress": "02:42:ac:12:00:05","DriverOpts": null}}}}
]
# 注:有用的信息如上,网络配置只有启动容器才有
## 从容器内拷贝首页文件到宿主机,修改后拷贝回容器内# 下载格式
~]# docker cp 容器ID:容器路径 本机文件路径
~]# docker cp 9cae0af944d8:/usr/share/nginx/html/index.html ./index.html
~]# vim index.html
Hello Tedu
Hello Tedu
Hello Tedu# 上传格式
~]# docker cp 本机文件路径 容器id:容器内路径
~]# docker cp ./index.html 9cae0af944d8:/usr/share/nginx/html/index.html
# 测试 刚刚的详细信息可查看IP地址
~]# curl http://172.18.0.5/
## 启动容器
# 使用 attach启动(可以不带启动命令)
~]# docker attach 753ff4121bda
#注:推出后容器会关闭(解决翻案快捷键ctl+p,ctl+q),只能进入有交互式的容器,入nginx的应用服务则不会动
/]# ctl+p,ctl+q  >> read escape sequence# 使用exec(必须带启动命令)
~]# docker exec -it 753ff4121bda /bin/bash
# 退出后不会关闭容器,可以进入任意容器#注:attach连接的是容器的启动进程(主要用于排错)而exec进入的则是新进程(主要用于维护管理)
~]# docker attach 753ff4121bda
# 此时啥也没有~]# curl http://172.18.0.5/haha.html
curl: (7) Failed connect to 172.18.0.5:80; Connection refused
# 此时容器内就会报错

三.容器的进程管理

1.上帝进程的概述

简单的说就是系统创建之初产生的第一个进程

特点:

-没有父进程

-PID==1

-所有进程都是他的子进程,孙子进程,曾孙,玄孙进程

-上帝进程死亡系统实例也就不存在

2.上帝进程与容器的关系

容器的启动进程就是上帝进程,他的pid==1

上帝进程退出==容器关闭

如何保证容器不关闭?

-容器的启动进程不能被关闭

-容器的启动进程必须在前台运行

前台服务与后台服务

容器的启动进程在后台运行不等于容器在后台运行

容器的启动服务

-前台服务(-it)

一般能与用户交互的程序,比如/bin/bash /bin/sh

-后台服务(-itd)

一般是一个程序的服务,比如apache、nginx、redis等

示例

# 查看该容器的启动进程
/]# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 09:35 pts/0    00:00:00 /bin/bash
# 查看当前进程
/]# echo $$
1
~]# docker ps -a
CONTAINER ID   IMAGE  COMMAND        CREATED     STATUS       PORTS        NAMES
753ff4121bda   centos  "/bin/bash"   3 hours ago Exited (0) 2 seconds ago  vigilant_payne

3.僵尸进程与孤儿进程的基本概念

我们知道在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的进程。子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束。 当一个 进程完成它的工作终止之后,它的父进程需要调用wait()或者waitpid()系统调用取得子进程的终止状态。

孤儿进程:

一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。  

僵尸进程:

一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵死进程。

问题及危害

  unix提供了一种机制可以保证只要父进程想知道子进程结束时的状态信息, 就可以得到。这种机制就是: 在每个进程退出的时候,内核释放该进程所有的资源,包括打开的文件,占用的内存等。 但是仍然为其保留一定的信息(包括进程号the process ID,退出状态the termination status of the process,运行时间the amount of CPU time taken by the process等)。直到父进程通过wait / waitpid来取时才释放。 但这样就导致了问题,如果进程不调用wait / waitpid的话, 那么保留的那段信息就不会释放,其进程号就会一直被占用,但是系统所能使用的进程号是有限的,如果大量的产生僵死进程,将因为没有可用的进程号而导致系统不能产生新的进程. 此即为僵尸进程的危害,应当避免。

孤儿进程是没有父进程的进程,孤儿进程这个重任就落到了init进程身上,init进程就好像是一个民政局,专门负责处理孤儿进程的善后工作。每当出现一个孤儿进程的时候,内核就把孤 儿进程的父进程设置为init,而init进程会循环地wait()它的已经退出的子进程。这样,当一个孤儿进程凄凉地结束了其生命周期的时候,init进程就会代表党和政府出面处理它的一切善后工作。因此孤儿进程并不会有什么危害。

任何一个子进程(init除外)在exit()之后,并非马上就消失掉,而是留下一个称为僵尸进程(Zombie)的数据结构,等待父进程处理。这是每个 子进程在结束时都要经过的阶段。如果子进程在exit()之后,父进程没有来得及处理,这时用ps命令就能看到子进程的状态是“Z”。如果父进程能及时 处理,可能用ps命令就来不及看到子进程的僵尸状态,但这并不等于子进程不经过僵尸状态。 如果父进程在子进程结束之前退出,则子进程将由init接管。init将会以父进程的身份对僵尸状态的子进程进行处理。

僵尸进程危害场景:

  例如有个进程,它定期的产 生一个子进程,这个子进程需要做的事情很少,做完它该做的事情之后就退出了,因此这个子进程的生命周期很短,但是,父进程只管生成新的子进程,至于子进程 退出之后的事情,则一概不闻不问,这样,系统运行上一段时间之后,系统中就会存在很多的僵死进程,倘若用ps命令查看的话,就会看到很多状态为Z的进程。 严格地来说,僵死进程并不是问题的根源,罪魁祸首是产生出大量僵死进程的那个父进程。因此,当我们寻求如何消灭系统中大量的僵死进程时,答案就是把产生大 量僵死进程的那个元凶枪毙掉(也就是通过kill发送SIGTERM或者SIGKILL信号啦)。枪毙了元凶进程之后,它产生的僵死进程就变成了孤儿进 程,这些孤儿进程会被init进程接管,init进程会wait()这些孤儿进程,释放它们占用的系统进程表中的资源,这样,这些已经僵死的孤儿进程 就能瞑目而去了。

4.服务在前台运行实验

1)容器内安装apache服务

# 删除所有容器(防止影响测试)
~]# docker rm -f $(docker ps -aq)
# 启动一个容器
~]# docker run -it --name myapache centos:latest
# 搭建yum仓库,由于容器是与宿主机共享资源的,直接可以用宿主机的配置
/]# cd /etc/yum.repos.d/ && rm -rf *.repo
# --------------不要退出这个终端,在另一个终端拷贝 yum 配置文件到容器--------------------
~]# cp /etc/yum.repos.d/CentOS-Base.repo myapache:/etc/yum.repos.d/
#------------------------回到创建容器的终端继续执行命令---------------------
# 安装软件
/]# yum install -y net-tools httpd
# 写一个默认网页
/]# echo Hello world >/var/www/html/index.html## 由于容器内么有systemd进程所以只能用手动启动启动
/]# ps -ef   #可以看出没有systemd进程
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 09:35 pts/0    00:00:00 /bin/bash
root        31     1  0 11:11 pts/0    00:00:00 ps -ef
# 查看服务的启动参数
~]# cat /usr/lib/systemd/system/httpd.service
.....
ExecStart=/usr/sbin/httpd -D $OPTIONS -DFOREGROUND
.......
# 可以发现有一个环境变量,此时查看
~]# cat /etc/sysconfig/httpd
......
#OPTIONS=
....
LANG=C
....
# 配置环境变量
/]# export LANG=C
# 查看网卡ip
/]# ifconfig
.....
...172.17.0.2...
.....
# 手动启动
/]# /usr/sbin/httpd -DFOREGROUND
# 此时会发现会占用此终端(ctl+p,ctl+q)
# 访问测试
~]# curl http://172.17.0.2/
Hello world

总结

管理镜像使用 名称:标签

管理容器使用 **容器ID

Docker安装与镜像,容器命令管理相关推荐

  1. Docker的安装和镜像容器的基本操作

    Docker的安装和镜像容器的基本操作 Docker 概述 Docker与虚拟机的区别 namespace的六项隔离 Docker核心概念 安装 Docker Docker 镜像操作 搜索镜像 获取镜 ...

  2. 使用docker安装ubuntu镜像

    使用docker安装ubuntu镜像 查找Ubuntu镜像 docker search ubuntu 安装Ubuntu镜像 docker pull ubuntu 查看docker镜像 docker i ...

  3. docker安装的PHPFPM容器Redis扩展

    使用docker安装的PHPFPM容器没有Redis扩展,需要安装一下扩展. 首先进入docker的PHPFPM容器 1 $ docker exec -it myphpfpm /bin/bash 依次 ...

  4. 群晖NAS教程(十七)、利用Docker安装网心云容器魔方

    为了更好的浏览体验,欢迎光顾勤奋的凯尔森同学个人博客 群晖NAS教程(十七).利用Docker安装网心云容器魔方 个人博客 一.群晖docker套件中安装onething1/wxedge镜像. 二.w ...

  5. Docker 安装、镜像、dockerfile、容器、仓库

    2018-05-30 参考: 1.<docker从入门到实战> 2.菜鸟教程http://www.runoob.com/docker/docker-command-manual.html. ...

  6. Docker安装及镜像配置(常用命令介绍)

    一.安装Docker 官网 https://docs.docker.com/engine/install/centos/ # 1.卸载旧的版本 yum remove docker \docker-cl ...

  7. 什么是Docker?Docker安装及镜像、容器的基本命令实验+理论!!!

    文章目录 一.Docker简介 1.什么Docker? 2.Docker使用的机制? 3.Docker的三要素? 3.1 镜像 3.2 容器 3.3 仓库 3.3.1 public(公有仓库) 3.3 ...

  8. docker安装+配置镜像+命令操作+数据卷+网络管理+DockerFile+镜像服务+项目部署+[高级使用]

    文章目录 Docker基础 一.Docker介绍 1. 什么是虚拟化 2. 什么是Docker 3. 容器与虚拟机比较 4. Docker优势 5. Docker架构 [1]镜像服务(`Image`) ...

  9. Docker安装 下载镜像 部署容器 备份 创建私服

    Docker 学习目标: 掌握Docker基础知识,能够理解Docker镜像与容器的概念 完成Docker安装与启动 掌握Docker镜像与容器相关命令 掌握Tomcat Nginx 等软件的常用应用 ...

最新文章

  1. OpenResty中的upstream healthcheck功能沉思录
  2. js weibo api
  3. web安全测试视频课程专题_有关有效企业测试的视频课程
  4. 20145335郝昊《网络攻防》Bof逆向基础——ShellCode注入与执行
  5. leetcode169. 多数元素——pygo
  6. android sdk版本升级,个推 Android SDK 老版本升级2.9.+
  7. 天津全国计算机等级考试报名时间2020,天津2020年计算机等级考试报名时间汇总...
  8. [转载] Spring的数据库操作---- Spring框架对JDBC的整合---- spring集成jdbc概述
  9. 斯坦福22岁辍学少年的独角兽野心:准备颠覆硅基无人车激光雷达
  10. MySQL 和 MySQL Workbench图形化安装教程
  11. mysql coreseek_Coreseek使用
  12. 深度学习中number of training epochs中的,epoc h到底指什么?
  13. 简述存储器的分级策略
  14. html页面显示代码插件,jQuery – 高亮动态显示页面HTML代码插件
  15. 计算机中z代表啥子意思,ctrl z英文是什么意思
  16. 块、内联、内联块都有哪些及其特点
  17. subprocess模块call的用法
  18. 超全!互联网大厂的薪资和职级一览
  19. 2020美赛F奖论文(四):模拟退火算法驱动的结构策略设计
  20. PP实施经验分享(5)——SAP中MD04显示常用函数(读取SAP MRP运行数据)

热门文章

  1. 用初次训练的SVM+HOG分类器在负样本原图上检测HardExample
  2. matplotlib-绘制精美的图表
  3. ibmm,让思维导图回归本质
  4. 图像检索中相似度度量公式:各种距离
  5. java 8 stream()
  6. 《HTML5触摸界面设计与开发》——导读
  7. 《树莓派Python编程入门与实战(第2版)》——1.7 排除树莓派的故障
  8. 从0开始学springboot之启蒙篇
  9. oracle rman 跨版本恢复 11.2.0.3- 11.2.0.4
  10. unity3d v5.1.1 ugui 带垂直滚动条的文本框