2021-05-13

目录

Docker 常用命令

删除 Docker CE

运行交互式的容器

启动容器(后台模式)

停止容器

重启容器

删除容器

进入容器

删除镜像

Docker 客户端

查找镜像

创建镜像

构建镜像

设置镜像标签

容器命名

镜像加速


Docker 常用命令

查看版本 docker version

启动 Docker 进程

sudo systemctl start docker

关闭进程

sudo systemctl stop docker

删除 Docker CE

sudo yum remove docker-ce

sudo rm -rf /var/lib/docker

运行交互式的容器

docker run -i -t ubuntu:15.10 /bin/bash -t:在新容器内指定一个伪终端或终端。 -i:允许你对容器内的标准输入 (STDIN) 进行交互

我们可以通过运行exit命令或者使用CTRL+D来退出容器

启动容器(后台模式)

docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"

docker ps

在容器内使用docker logs命令,查看容器内的标准输出

docker logs 2b1b7a428627

docker logs amazing_cori

停止容器

docker stop amazing_cori

docker stop 2b1b7a428627

重启容器

docker start amazing_cori

docker start 2b1b7a428627

删除容器

docker rm determined_swanson

删除时,容器必须是停止状态,否则会报错

可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序

进入容器

docker run -d --name ubuntu ubuntu:15.10 /bin/sh

docker run -d --name nginx -p 80:80 --volumes-from=ubuntu nginx

docker run -d --name tomcat -p 8080:8080 --volumes-from=ubuntu tomcat

docker run -d --name nginx -p 80:80 -v /www:/var/www nginx

docker exec -i -t nginx /bin/bash

删除镜像

docker rmi determined_swanson

Docker在容器中管理数据主要有两种方式:

数据卷(Data Volumes):容器内数据直接映射到宿主机

docker run -d --name nginx -p 80:80 -v /www:/var/www nginx

把宿主机的/www映射到docker 容器的/var/www nginx目录

数据卷容器(Data Volume Containers):使用特定容器来管理数据

如果要在多个容器之间共享数据,最简便的方式就是使用数据卷容易,数据卷容器就是使用一个特定容器来做数据卷,多个其他容器可以同时挂载这个数据卷,从而达到共享数据的目的。

创建数据卷容器也是使用 docker run  跟 -v 参数,这里以 ubuntu:latest 镜像创建的容器作为数据卷容器:

docker run -it -v /data --name ubuntu ubuntu /bin/bash

作为数据卷容器的容器不需要是运行状态,docker run 跟 --volumes-from 参数可以指定某个容器作为数据卷

docker run -d --name nginx -p 80:80 --volumes-from=ubuntu nginx

docker run -d --name tomcat -p 8080:8080 --volumes-from=ubuntu tomcat

安装mysql数据库

docker search mysql

docker pull mysql:5.7

docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7

稍等,需要一会儿初始化。

进入docker容器

docker exec -it mysql /bin/bash

docker stop mysql

docker rm mysql

查询所有docker容器(包含未运行的):

docker ps -a

获取容器/镜像的元数据

docker inspect mysql

Docker 客户端

docker

查看 docker stats 指令的具体使用方法

docker stats --help

载入镜像

docker pull training/webapp

docker run -d -P training/webapp python app.py -d:让容器在后台运行 -P:将容器内部使用的网络端口映射到我们使用的主机上

Docker 开放了 5000 端口(默认 Python Flask 端口)映射到主机端口 32769 上

docker run -d -p 5000:5000 training/webapp python app.py 容器内部的 5000 端口映射到我们本地主机的 5000 端口上

查看指定 (ID或者名字)容器的某个确定端口映射到宿主机的端口号

docker port 7a38a1ad55c6

docker port determined_swanson

查看docker容器的详细信息

docker inspect determined_swanson

查找镜像

docker search httpd

创建镜像

1.从已经创建的容器中更新镜像,并且提交这个镜像

例如 docker run -t -i ubuntu:15.10 /bin/bash

在运行的容器内使用 apt-get update 命令进行更新。

在完成操作之后,输入 exit命令来退出这个容器

此时ID为e218edb10161的容器,是按我们的需求更改的容器。我们可以通过命令 docker commit来提交容器副本

docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2

-m:提交的描述信息

-a:指定镜像作者

e218edb10161:容器ID

runoob/ubuntu:v2:指定要创建的目标镜像名

使用 docker images 命令来查看我们的新镜像 runoob/ubuntu:v2

使用我们的新镜像 runoob/ubuntu 来启动一个容器

docker run -t -i runoob/ubuntu:v2 /bin/bash

构建镜像

我们使用命令 docker build , 从零开始来创建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像

[root@localhost ~]# cat Dockerfile FROM centos:6.7 MAINTAINER Fisher "fisher@sudops.com" RUN /bin/echo 'root:123456' |chpasswd RUN useradd runoob RUN /bin/echo 'runoob:123456' |chpasswd RUN /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local EXPOSE 22 EXPOSE 80 CMD /usr/sbin/sshd -D

每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。

第一条FROM,指定使用哪个镜像源

RUN 指令告诉docker 在镜像内执行命令,安装了什么。。。

然后,我们使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像。

[root@localhost ~]# docker build -t runoob/centos:6.7 .

-t :指定要创建的目标镜像名

. :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径

设置镜像标签

docker tag 860c279d2fec runoob/centos:dev

docker tag 镜像ID 可以为镜像多一个标签

容器命名

docker run -d --name tomcat -p 8080:8080 tomcat

docker run -d --name nginx -p 80:80 nginx

docker和服务端守护进程通信有两种方式一个就是docker自己的client(docker cli)还有一个就是用户可以自己写程序,调用docker的remote-api来和docker的守护进程通信。还有要知道的是docker客户端和服务端是使用socket连接方式的,有三种socket连接方式,一种是直接连接本地的socket文件unix:///var/run/docker/sock,第二种是tcp://host:prot,第三种是fd://socketfd,默认docker都是直接连接本地的socket文件,而且还支持fd://socketfd,如果我们要支持远程连接就必须要加上tcp连接方式

使用docker本地客户端连接远程docker服务端

创建/etc/docker/daemon.json,默认docker不创建这个文件,配置如下:

{

"registry-mirrors": ["https://kf0vxqi6.mirror.aliyuncs.com"],

"labels": ["name=docker-server"],

"hosts": [

"tcp://0.0.0.0:2376",

"unix:///var/run/docker.sock"

]

}

第一行是仓库地址,第二行是给docker-daemon做一个标签,第三行hosts就是连接方式,现在docker同时支持两种连接方式了

接着我们直接在客户端centos机器上连接服务端的机器,输入下面命令

docker -H tcp://192.168.0.83:2376 info

-H后面就是指定连接的服务端地址 info表示查看服务端daemon的信息

一个Docker镜像可以构建于另一个Docker镜像之上,这种层叠关系可以是多层的。第1层的镜像层我们称之为基础镜像(Base Image),其他层的镜像(除了最顶层)我们称之为父层镜像(Parent Image)。这些镜像继承了他们的父层镜像的所有属性和设置,并在Dockerfile中添加了自己的配置。

Docker镜像通过镜像ID进行识别。镜像ID是一个64字符的十六进制的字符串。但是当我们运行镜像时,通常我们不会使用镜像ID来引用镜像,而是使用镜像名来引用,docker images

docker run ubuntu:15.10

它会在所有的镜像层之上增加一个可写层。这个可写层有运行在CPU上的进程,而且有两个不同的状态:运行态(Running)和退出态(Exited)。这就是Docker容器。当我们使用docker run启动容器,Docker容器就进入运行态,当我们停止Docker容器时,它就进入退出态。

当我们有一个正在运行的Docker容器时,从运行态到停止态,我们对它所做的一切变更都会永久地写到容器的文件系统中。要切记,对容器的变更是写入到容器的文件系统的,而不是写入到Docker镜像中的。

我们可以用同一个镜像启动多个Docker容器,这些容器启动后都是活动的,彼此还是相互隔离的。我们对其中一个容器所做的变更只会局限于那个容器本身。

CentOS Docker 安装

Docker支持以下的CentOS版本:

  • CentOS 7 (64-bit)
  • CentOS 6.5 (64-bit) 或更高的版本

使用脚本安装 Docker

1、使用 sudo 或 root 权限登录 Centos。

2、确保 yum 包更新到最新。

$ sudo yum update

3、执行 Docker 安装脚本。

$ curl -fsSL https://get.docker.com -o get-docker.sh $ sudo sh get-docker.sh --mirror Aliyun

执行这个脚本会添加 docker.repo 源并安装 Docker。

4、启动 Docker 进程。

sudo systemctl start docker

5、验证 docker 是否安装成功并在容器中执行一个测试的镜像。

$ sudo docker run hello-world docker ps

到此,Docker 在 CentOS 系统的安装完成。

镜像加速

鉴于国内网络问题,后续拉取 Docker 镜像十分缓慢,我们可以需要配置加速器来解决,我使用的是网易的镜像地址:http://hub-mirror.c.163.com。

新版的 Docker 使用 /etc/docker/daemon.json(Linux) 或者 %programdata%\docker\config\daemon.json(Windows) 来配置 Daemon。

请在该配置文件中加入(没有该文件的话,请先建一个):

{ "registry-mirrors": ["http://hub-mirror.c.163.com"] }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值