Docker可以运行在MAC,Windows,Linux系统上。本次教程使用Centos7系统操作。使用root账号登录。
# 1、安装docker所需的软件包sudo yum install -y yum-utils device-mapper-persistent-data lvm2# 2、配置国内 docker 的 yum 源(阿里云)sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 3、安装 docker-cesudo yum install docker-ce docker-ce-cli containerd.io -y
yum-util
:提供yum-config-manager
功能
device-mapper-persistent-data
和lvm2
是软件驱动依赖
docker-ce-cli
:作用是 docker 命令行工具包
containerd.io
:作用是容器接口相关包
docker-ce 是 docker 公司维护的开源项目,是一个基于 moby 项目的免费的容器产品
docker-ee 是 docker 公司维护的闭源产品,是 docker 公司的商业产品。
查看信息
如果服务没有运行的话,使用以下命令运行
systemctl start docker && systemctl enable docker
查看Docker版本信息
docker version
查看Docker信息,确认服务运行。显示 Docker 系统信息,包括镜像和容器数。
docker info
信息说明
[root@localhost ~]# docker infoContainers: 0 Running: 0 Paused: 0 Stopped: 0Images: 0Server Version: 1.13.1Storage Driver: overlay2 Backing Filesystem: xfs...Name: localhost.localdomainID: G26P:TKID:4Y5E:JFGR:GZRV:KPKB:2H2H:II35:6ASJ:GSLV:ATVT:5YPDDocker Root Dir: /var/lib/dockerDebug Mode (client): falseDebug Mode (server): falseRegistry: https://index.docker.io/v1/Experimental: false...
Docker Root Dir
:默认的 docker 的家目录,以后的镜像都默认放置在这个目录下
Registry
:默认去这个网站找docker镜像
速器地址 |
---|
https://tnhnay7v.mirror.aliyuncs.com |
下面就是阿里云官方提供的使用方式。跟着做就行了。
- 安装/升级Docker客户端
推荐安装1.10.0以上版本的Docker客户端,参考文档 docker-ce- 配置镜像加速器
针对Docker客户端版本大于 1.10.0 的用户
您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-‘EOF‘{ "registry-mirrors": ["https://tnhnay7v.mirror.aliyuncs.com"]}EOFsudo systemctl daemon-reloadsudo systemctl restart docker
测试可以使用我的这个,正式发布的时候,建议大家使用自己的镜像地址。
# 启动docker服务systemctl start docker# 停止docker服务systemctl stop docker# 重启docker服务systemctl restart docker# 查看docker服务状态systemctl status docker# 设置开机启动docker服务systemctl enable docker
镜像是docker的核心概念,可以认为镜像就是对某些运行环境或者软件打的包,用户可以从docker仓库中下载基础镜像到本地。
镜像有关的操作有:
镜像列表
镜像详情
镜像搜索
拉取镜像
删除镜像
镜像列表
docker images
[root@localhost ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEdocker.io/centos latest 831691599b88 6 weeks ago 215 MB
REPOSITORY:镜像名称
TAG:镜像标签
IMAGE ID:镜像ID
CREATED:镜像的创建日期
镜像详情
docker inspect [镜像ID/名称]
查询的内容有点多,这里查看镜像版本为例。
[root@localhost docker-build]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEdocker.io/centos latest 831691599b88 6 weeks ago 215 MB[root@localhost docker-build]# docker inspect 831691599b88[ { "Id": "sha256:831691599b88ad6cc2a4abbd0e89661a121aff14cfa289ad840fd3946f274f1f", "RepoTags": [ "docker.io/centos:latest" ], ... "DockerVersion": "18.09.7", "Author": "", ... }]
可以看到这个
centos:latest
的版本是18.09.7
。
镜像搜索
docker search [镜像名称]
root@localhost ~]# docker search centosINDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATEDdocker.io docker.io/centos The official build of CentOS. 6112 [OK] docker.io docker.io/ansible/centos7-ansible Ansible on Centos7 132 [OK]docker.io docker.io/consol/centos-xfce-vnc Centos container with "headless" VNC sessi... 118 [OK]docker.io docker.io/jdeathe/centos-ssh OpenSSH / Supervisor / EPEL/IUS/SCL Repos ... 115 [OK]docker.io docker.io/centos/systemd systemd enabled base container. 86 [OK]...
NAME:镜像名称
DESCRIPTION:镜像描述
STARS:用户评价,反应一个镜像的受欢迎程度
OFFICIAL:是否官方
AUTOMATED:自动构建,表示该镜像由Docker Hub自动构建流程创建的
拉取镜像
docker pull [镜像名称]
[root@localhost ~]# docker pull centosUsing default tag: latestTrying to pull repository docker.io/library/centos ... latest: Pulling from docker.io/library/centos6910e5a164f7: Pull complete Digest: sha256:4062bbdd1bb0801b0aa38e0f83dece70fb7a5e9bce223423a68de2d8b784b43bStatus: Downloaded newer image for docker.io/centos:latest
删除镜像
删除指定镜像
docker rmi [镜像id]
删除所有镜像
docker rmi `docker images -q`
[root@localhost ~]# docker rmi 831691599b88Untagged: docker.io/centos:latestUntagged: docker.io/centos@sha256:4062bbdd1bb0801b0aa38e0f83dece70fb7a5e9bce223423a68de2d8b784b43bDeleted: sha256:831691599b88ad6cc2a4abbd0e89661a121aff14cfa289ad840fd3946f274f1fDeleted: sha256:eb29745b8228e1e97c01b1d5c2554a319c00a94d8dd5746a3904222ad65a13f8
容器,也是docker中的核心概念,容器是由镜像运行产生的运行实例。镜像和容器的关系,就如同PHP语言中类和对象的关系。
容器相关的操作有:
查看容器
创建容器
启动容器
停止容器
删除容器
文件拷贝
目录挂载
查看容器ip地址
端口映射
查看容器
正在运行的容器
docker ps
所有容器
docker ps -a
[root@localhost ~]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESaa36de1a05f3 centos:latest "bash" 7 minutes ago Exited (0) 6 minutes ago elated_williams
查看容器
基于现有的镜像,可以使用如下的命令,启动自己的容器。
docker run [镜像][参数...]
可以执行的参数有
-i
:表示运行容器
-t
:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。一般都是-it
一起使用。
--name
:为创建的容器命名。
-v
:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v
做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,可以共享到容器上。
-d
:在run
后面加上-d
参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
-p
:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p
做多个端口映射
(1) 交互式容器
以交互式方式创建并启动容器,启动完成后,直接进入当前容器。可使用exit
命令退出容器。需要注意以此种方式启动容器,如果退出容器,则容器会进入停止状态。
docker run -it --name=mycentos centos /bin/bash
创建并启动名称为"mycentos"的交互式容器;上面指令中的镜像名称
centos
也可以使用镜像id
[root@localhost ~]# docker run -it --name=mycentos centos /bin/bash[root@26c41dc277b7 /]# ls -a . .. .dockerenv bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
创建成功,并且已经进入了容器内部。注意看root后面的地址已经变成了
26c41dc277b7
了。
(2) 守护式容器
创建一个守护式容器;如果对于一个需要长期运行的容器来说,我们可以创建一个守护式容器。命令如下(容器名称不能重复)
docker run -di --name=mycentos2 centos
[root@localhost ~]# docker run -di --name=mycentos2 centos640fac3bbf082e6a17cea153f49ae373f15ddf815cf1a813d7e29d9027560713[root@localhost ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES640fac3bbf08 centos "/bin/bash" 6 seconds ago Up 5 seconds mycentos2
命令行输出了容器ID,证明创建成功了。使用
docker ps
查看正在运行的命令,能看到自己正在运行的命令。
需要登录进入该容器的话,可以使用下面的命令
docker exec -it [容器名] /bin/bash
[容器名]:容器名称或者容器ID都是可以的。退出的话,使用
exit
。
[root@localhost ~]# docker exec -it mycentos2 /bin/bash[root@640fac3bbf08 /]# ls -a . .. .dockerenv bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
停止或启动容器
停止容器
docker stop mycentos
启动容器
docker start mycentos
[root@localhost ~]# docker stop mycentos2mycentos2[root@localhost ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES[root@localhost ~]# docker start mycentos2mycentos2[root@localhost ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES640fac3bbf08 centos "/bin/bash" 8 minutes ago Up 3 seconds mycentos2
删除容器
删除指定容器
docker rm mycentos3
删除全部容器
docker rm $(docker ps -aq)
停用并删除所有容器
docker stop $(docker ps -q) & docker rm $(docker ps -aq)
[root@localhost ~]# docker rm mycentos3Error response from daemon: You cannot remove a running container 1627ee165666780a98e48a8f0faaa13009264fafd373d60c783d20bed18ba36e. Stop the container before attempting removal or use -f[root@localhost ~]# docker stop mycentos3mycentos3[root@localhost ~]# docker rm mycentos3mycentos3
如果容器在运行,必须将其停止后,才能删除。或者加
-f
强制删除
文件拷贝
(1) 将宿主机中的文件拷贝到容器内
拷贝当前目录的abc.txt
文件,拷贝到容器的根目录
docker cp abc.txt mycentos2:/
[root@localhost ~]# docker cp abc.txt mycentos2:/[root@localhost ~]# docker exec -it mycentos2 /bin/bash[root@640fac3bbf08 /]# ls -a . .. .dockerenv abc.txt bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
拷贝完成后,使用
docker exec
进入目标容器,能看到自己的文件。
(2) 将文件从容器内拷贝到宿主机
使用exit
退出容器,在宿主机内部操作,只需要把上面的地址对调就行了
docker cp mycentos2:/def.txt /root
[root@localhost ~]# docker cp mycentos2:/def.txt /root[root@localhost ~]# ls -a . abc.txt .bash_history .bash_profile .cshrc .pki test.txt.. anaconda-ks.cfg .bash_logout .bashrc def.txt .tcshrc .viminfo
目录挂载
在创建容器的时候,可以将宿主机的目录与容器内的目录进行映射。这样我们就可以通过修改宿主机某个目录的文件从而去影响容器内的目录。创建容器时添加-v
参数,后边为[宿主机目录]:[容器目录]
我在/usr/local
创建了一个test
目录,路径:/usr/local/test
docker run -di -v /usr/local/test:/usr/local/test --name=mycentos3 centos
[root@localhost ~]# docker run -di -v /usr/local/test:/usr/local/test --name=mycentos3 centos1627ee165666780a98e48a8f0faaa13009264fafd373d60c783d20bed18ba36e[root@localhost ~]# touch /usr/local/test/def.txt[root@localhost ~]# docker exec -it mycentos3 /bin/bash[root@1627ee165666 /]# ls /usr/local/testdef.txt
容器创建成功后,在宿主机创建了
def.txt
文件,使用docker exec
登录进去虚拟机后,能正常查看到该文件。
查看容器ip
docker inspect mycentos2
[root@localhost ~]# docker inspect mycentos2[ { ... "NetworkSettings": { ... "Gateway": "172.17.0.1", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "IPAddress": "172.17.0.2", "IPPrefixLen": 16, "IPv6Gateway": "", "MacAddress": "02:42:ac:11:00:02", ... } }]
内容有点多,这里做精简。
NetworkSettings
下的IPAddress
就是ip地址。
端口映射
使用-p
进行端口映射。语法是:
docker run -d -p [物理机端口]:[容器端口] centos:httpd
实例
[root@localhost ~]# docker run -d -p 80:80 centos:httpd9e003c5ce2e91d6023347d09aaa2d46cd4dd3cf73b869966fa67d45be24b492b