Docker基本使用

363 阅读4分钟

资料来源:blog.csdn.net/weimenglala… blog.csdn.net/wzwwzwwww/a… www.cnblogs.com/shenyixin/p…

docker启动,重启,关闭命令

启动        		systemctl start docker
守护进程重启   	sudo systemctl daemon-reload
重启docker服务   systemctl restart  docker
重启docker服务  	sudo service docker restart
关闭docker 		service docker stop 
关闭docker 		systemctl stop docker

docker安装

1,查看内核版本

  • Docker要求Centos系统的内核版本高于3.10
uname -r
  • 本机的内核版本:3.10.0-327.el7.x86_64

2,把yum包更新到最新

  • 时间可能有点长,慢慢等待......
yum update

3,安装需要的软件包。

  • yum-util提供yum-config-manager功能,另外两个是devicemapper驱动所需依赖
yum install -y yum -utils device-mapper-persistent-data lvm2

4,查看仓库的docker版本

yum list docker-ce --showduplicates | sort -r

5,安装docker

yum install docker-ce

6,启动docker,设置开机启动docker

  • 安装之后一定要重新启动一次
systemctl start docker

systemctl enable docker

systemctl stop docker【补充:这是关闭docker的命令】

7,查看版本

docker version

8,检测是否启动成功,可以使用search命令

docker search mysql

在这里插入图片描述

9,查看日志状态

systemctl status docker.service

在这里插入图片描述

docker换源

  • 阿里云镜像获取地址:cr.console.aliyun.com/cn-hangzhou…,登陆后,就可以看到专属的加速器地址
  • 可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器

1,daemon.json修改

要是没有该文件可以自己新建一个,或者用如下步骤设置: 新建文件夹

sudo mkdir -p /etc/docker

写入daemon.json的内容

sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["你的专属源地址"]
}
EOF

在这里插入图片描述 守护进程重启

sudo systemctl daemon-reload

重启docker

sudo systemctl restart docker

2,查看是否配置成功

docker info

在这里插入图片描述

3,其他系统的换源

在这里插入图片描述

卸载docker

1,查看安装过的包

yum list installed | grep docker
  • 本机安装过的旧版本:docker.x86_64,docker-client.x86_64,docker-common.x86_64

2,删除安装的Docker相关的软件包:

yum -y remove docker.x86_64

yum -y remove docker-client.x86_64

yum -y remove docker-common.x86_64

基本概念

Docker 包括三个基本概念:

  • 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
  • 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
  • 仓库(Repository):仓库可看着一个代码控制中心,用来保存镜像。

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器

docker容器命令

语法

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

OPTIONS说明:

-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;

-d: 后台运行容器,并返回容器ID;

-i: 以交互模式运行容器,通常与 -t 同时使用;

-P: 随机端口映射,容器内部端口随机映射到主机的高端口

-p: 指定端口映射,格式为:主机(宿主)端口:容器端口

-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;

--name="nginx-lb": 为容器指定一个名称;

--dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;

--dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;

-h "mars": 指定容器的hostname;

-e username="ritchie": 设置环境变量;

--env-file=[]: 从指定文件读入环境变量;

--cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;

-m :设置容器使用内存最大值;

--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;

--link=[]: 添加链接到另一个容器;

--expose=[]: 开放一个端口或一组端口;

--volume , -v:	绑定一个卷

输出Hello world

输出Hello world
docker run ubuntu:15.10 /bin/echo "Hello world"
ubuntu:15.10 指定要运行的镜像,Docker 首先从本地主机上查找镜像是否存在,
			如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。
/bin/echo "Hello world": 在启动的容器里执行的命令

启动容器

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

指定容器的名字

docker run -itd --name ubuntu-test ubuntu /bin/bash
注:加了 -d 参数默认不会进入容器,想要进入容器需要使用指令 docker exec

进入容器

docker attach

docker exec:推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止。

attach 命令

docker attach 1e560fca3906 
  • 注意: 如果从这个容器退出,会导致容器的停止。

exec 命令

docker exec -it 243c32535da7 /bin/bash
  • 注意: 如果从这个容器退出,不会导致容器的停止,这就是为什么推荐大家使用 docker exec 的原因。

查看运行中的容器

docker ps

在这里插入图片描述 CONTAINER ID: 容器 ID。 IMAGE: 使用的镜像。 COMMAND: 启动容器时运行的命令。 CREATED: 容器的创建时间。 STATUS: 容器状态。 状态有7种:

  • created(已创建)
  • restarting(重启中)
  • running(运行中)
  • removing(迁移中)
  • paused(暂停)
  • exited(停止)
  • dead(死亡)

PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。 NAMES: 自动分配的容器名称。

查看所有的容器命令如下:

docker ps -a

退出终端

exit 或者ctrl D

停止容器

docker stop 2b1b7a428627 或者docker stop 名字

重启容器

docker restart <容器 ID>

删除容器

删除容器使用 docker rm 命令:

docker rm -f 1e560fca3906

清理掉所有处于终止状态的容器

docker container prune

导出和导入容器

导出容器

如果要导出本地某个容器,可以使用 docker export 命令。

docker export 1e560fca3906 > ubuntu.tar
  • 导出容器 1e560fca3906 快照到本地文件 ubuntu.tar。

导入容器快照

可以使用 docker import 从容器快照文件中再导入为镜像,以下实例将快照文件 ubuntu.tar 导入到镜像 test/ubuntu:v1:

cat docker/ubuntu.tar | docker import - test/ubuntu:v1

此外,也可以通过指定 URL 或者某个目录来导入,例如:

docker import http://example.com/exampleimage.tgz example/imagerepo

运行一个 web 应用

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

我们也可以通过 -p 参数来设置不一样的端口:

docker run -d -p 80:5000 training/webapp python app.py //80是外面机器端口,5000是容器端口

直接查看端口的方式

docker port bf08b7f2cd89
5000/tcp -> 0.0.0.0:5000

查看 WEB 应用程序日志

docker logs -f bf08b7f2cd89 或者docker logs 2b1b7a428627

查看WEB应用程序容器的进程

我们还可以使用 docker top 来查看容器内部运行的进程

runoob@runoob:~$ docker top wizardly_chandrasekhar
UID PID PPID ... TIME CMD
root 23245 23228 ... 00:00:00 python app.py

检查 WEB 应用程序

使用 docker inspect 来查看 Docker 的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息。

runoob@runoob:~$ docker inspect wizardly_chandrasekhar
[
    {
        "Id": "bf08b7f2cd897b5964943134aa6d373e355c286db9b9885b1f60b6e8f82b2b85",
        "Created": "2018-09-17T01:41:26.174228707Z",
        "Path": "python",
        "Args": [
            "app.py"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 23245,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2018-09-17T01:41:26.494185806Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
......

查询最后一次创建的容器

docker ps -l 

docker 镜像操作

列出镜像列表

docker images 

查找镜像

docker search httpd

拖取镜像

docker pull httpd

删除镜像

docker rmi hello-world

创建镜像

当我们从 docker 镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。

  • 1、从已经创建的容器中更新镜像,并且提交这个镜像
  • 2、使用 Dockerfile 指令来创建一个新的镜像

更新镜像

更新镜像之前,我们需要使用镜像来创建一个容器。

runoob@runoob:~$ docker run -t -i ubuntu:15.10 /bin/bash
root@e218edb10161:/#

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

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

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

runoob@runoob:~$ docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2
sha256:70bf1840fd7c0d2d8ef0a42a817eb29f854c1af8f7c59fc03ac7bdee9545aff8

各个参数说明:

-m: 提交的描述信息

-a: 指定镜像作者

e218edb10161:容器 ID

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

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

runoob@runoob:~$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
runoob/ubuntu       v2                  70bf1840fd7c        15 seconds ago      158.5 MB
ubuntu              14.04               90d5884b1ee0        5 days ago          188 MB
php                 5.6                 f40e9e0f10c8        9 days ago          444.8 MB
nginx               latest              6f8d099c3adc        12 days ago         182.7 MB
mysql               5.6                 f2e8d6c772c0        3 weeks ago         324.6 MB
httpd               latest              02ef73cf1bc0        3 weeks ago         194.4 MB
ubuntu              15.10               4e3b13c8a266        4 weeks ago         136.3 MB
hello-world         latest              690ed74de00f        6 months ago        960 B
training/webapp     latest              6fae60ef3446        12 months ago       348.8 MB

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

runoob@runoob:~$ docker run -t -i runoob/ubuntu:v2 /bin/bash                            
root@1a9fbdeb5da3:/#