资料来源:https://blog.csdn.net/weimenglala/article/details/102736921
https://blog.csdn.net/wzwwzwwww/article/details/104268458
https://www.cnblogs.com/shenyixin/p/11130538.html
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换源
- 阿里云镜像获取地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors,登陆后,就可以看到专属的加速器地址
- 可以通过修改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:/#