一、VMware创建虚拟机
二、加载Centos镜像安装系统
由于在安装docker的过程中,会遇到各种各样的错误,为了降低时间开销,需要利用VMware备份操作系统。
三、Docker安装
由于Docker 要求 CentOS 系统的内核版本高于 3.10,在安装docker前,先查看是否符合要求。
[root@localhost /]# uname -r
3.10.0-1160.el7.x86_64
3.1 更新yum
[root@localhost /]# yum update
更新成功如下图所示。
3.2 安装yum-utils
[root@localhost /]# yum install -y yum-utils
安装成功如下图所示。
3.3 安装device-mapper-persistent-data
[root@localhost /]# yum install -y device-mapper-persistent-data
安装成功如下图所示。
3.4 安装lvm2
[root@localhost /]# yum install -y lvm2
安装成功如下图所示。
3.5 设置yum源
如果不设置yum源为国内站点,默认是国外站点,容易出错。
[root@localhost /]# yum-config-manager --add-repo http:
配置成功如下图所示。
3.6 安装docker-ce版本
-ce表示这是docker的社区版,免费的。
[root@localhost /]# yum install docker-ce
安装成功如下图所示。 查看安装的docker版本。
[root@localhost /]# docker -v
Docker version 20.10.7, build f0df350
也可利用docker version命令查看详细信息。
[root@localhost /]# docker version
Client: Docker Engine - Community
Version: 20.10.7
API version: 1.41
Go version: go1.13.15
Git commit: f0df350
Built: Wed Jun 2 11:58:10 2021
OS/Arch: linux/amd64
Context: default
Experimental: true
Cannot connect to the Docker daemon at unix:
Q&A: 打印信息报“***Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?***”的错误,如何解决? 输入下面的命令启动docker服务即可。
[root@localhost /]# systemctl start docker.service
重新查看docker version信息,结果如下图所示。
[root@localhost /]# docker version
Client: Docker Engine - Community
Version: 20.10.7
API version: 1.41
Go version: go1.13.15
Git commit: f0df350
Built: Wed Jun 2 11:58:10 2021
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.7
API version: 1.41 (minimum version 1.12)
Go version: go1.13.15
Git commit: b0f5bc3
Built: Wed Jun 2 11:56:35 2021
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.4.6
GitCommit: d71fcd7d8303cbf684402823e425e9dd2e99285d
runc:
Version: 1.0.0-rc95
GitCommit: b9ee9c6314599f1b4a7f497e1f1f856fe433d3b7
docker-init:
Version: 0.19.0
GitCommit: de40ad0
这实际上验证了“Docker是一个客户端-服务器(C/S)架构程序”。
[root@localhost /]# uname -r
3.7 设置ustc镜像源
切换到**/etc/docker**目录下,查看其中的文件结构,可以看到没有daemon.json文件。
[root@localhost /]# cd /etc/docker
[root@localhost docker]# ls
key.json
直接vi命令新建一个即可。并在该文件中添加如下内容。
[root@localhost docker]# vi daemon.json
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
3.8 Docker的Hello World
执行docker run(创建一个容器)命令,结果如下所示。 输出的打印信息含义已注释在代码中。
从打印信息的4个step可以窥见docker的大致原理: (1)docker客户端连接到docker服务守护进程; (2)docker守护进程(或者说,docker服务器)从docker Hub拉取镜像文件; (3)docker守护进程从相应镜像(image)创建一个容器(container); (4)docker守护进程把镜像中的信息发送给docker客户端,并在终端中显示。
[root@localhost /]# docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
b8dfde127a29: Pull complete
Digest: sha256:df5f5184104426b65967e016ff2ac0bfcd44ad7899ca3bbcf8e44e4461491a9e
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https:
For more examples and ideas, visit:
https:
**Q&A:**daemon与服务之间的关系?
3.9 查看docker中的镜像
在执行docker的hello world后,查看docker中的镜像,结果如下所示,多了一个hello world的镜像。
[root@localhost /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest d1165f221234 4 months ago 13.3kB
可以使用rmi命令删除指定镜像,镜像名支持模糊搜索。
[root@localhost docker]# docker rmi d1
在删除时,报以下错误:
Error response from daemon: conflict: unable to delete d1165f221234 (must be forced) - image is being used by stopped container c8ac7c654d8c
根据描述,可知,有一个容器正在使用这个镜像,必须要先关闭容器。 利用docker ps命令,查看所有的容器,可以看到有一个使用“hello-world”镜像的容器,
[root@localhost /]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c8ac7c654d8c hello-world "/hello" 13 minutes ago Exited (0) 13 minutes ago modest_raman
如果要删除所有镜像
[root@localhost docker]# docker rmi `docker images -q`
3.10 搜索镜像
搜索镜像命令如下,可以看到报了以下错误,不要慌,耐心等待片刻,重新敲命令回车即可,或者可以给要查找的镜像名加上版本号。
[root@localhost /]# docker search mysql
Error response from daemon: Get https:
四、docker常用命令
4.1 docker run 创建容器
创建容器命令:docker run
-i:表示运行容器
-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
–name :为创建的容器命名。
-v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
-
通过docker run命令可以创建一个容器,指定依赖的镜像,如下所示。 -
创建成功后,会进入容器,@后面的ID号就是容器的编号。 -
进入容器后,docker相关的命令不可用,由于该容器使用的是centos7的镜像,因此进入容器,就相当于进入一个centos系统。 -
ll命令可以查看容器中的文件目录,可以看到与Linux系统相似。
[root@localhost /]# docker run -it --name=mycentos centos:7 /bin/bash
[root@9100b6a7f74e /]#
[root@9100b6a7f74e /]# docker ps
bash: docker: command not found
[root@9100b6a7f74e /]#
[root@9100b6a7f74e /]# ll
total 12
-rw-r--r--. 1 root root 12114 Nov 13 2020 anaconda-post.log
lrwxrwxrwx. 1 root root 7 Nov 13 2020 bin -> usr/bin
drwxr-xr-x. 5 root root 360 Jul 11 07:04 dev
drwxr-xr-x. 1 root root 66 Jul 11 07:04 etc
drwxr-xr-x. 2 root root 6 Apr 11 2018 home
lrwxrwxrwx. 1 root root 7 Nov 13 2020 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 Nov 13 2020 lib64 -> usr/lib64
drwxr-xr-x. 2 root root 6 Apr 11 2018 media
drwxr-xr-x. 2 root root 6 Apr 11 2018 mnt
drwxr-xr-x. 2 root root 6 Apr 11 2018 opt
dr-xr-xr-x. 121 root root 0 Jul 11 07:04 proc
dr-xr-x---. 2 root root 114 Nov 13 2020 root
drwxr-xr-x. 11 root root 148 Nov 13 2020 run
lrwxrwxrwx. 1 root root 8 Nov 13 2020 sbin -> usr/sbin
drwxr-xr-x. 2 root root 6 Apr 11 2018 srv
dr-xr-xr-x. 13 root root 0 Jul 11 05:25 sys
drwxrwxrwt. 7 root root 132 Nov 13 2020 tmp
drwxr-xr-x. 13 root root 155 Nov 13 2020 usr
drwxr-xr-x. 18 root root 238 Nov 13 2020 var
通过docker ps命令(通过SSH工具),可以看到容器中多了一个,如下所示,并且状态是Up。
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9100b6a7f74e centos:7 "/bin/bash" About a minute ago Up About a minute mycentos
c8ac7c654d8c hello-world "/hello" 41 minutes ago Exited (0) 41 minutes ago modest_raman
通过exit命令,可以退出容器。
[root@9100b6a7f74e /]# exit
exit
[root@localhost /]#
同时,查看容器状态,如下所示,对应的容器状态变成了Exit。
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9100b6a7f74e centos:7 "/bin/bash" 11 minutes ago Exited (0) 9 seconds ago mycentos
c8ac7c654d8c hello-world "/hello" About an hour ago Exited (0) About an hour ago modest_raman
4.2 以守护方式创建容器
可以发现,当以守护方式创建容器成功后,并没有进入容器,利用docker ps命令查看,发现创建的容器正在运行。
[root@localhost ~]# docker run -di --name=mycentos2 centos:7
e8dc522f2f4db1877ff48522c3af11f4bb3b15b26bbb5324a50a0b032471ad0e
[root@localhost ~]#
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e8dc522f2f4d centos:7 "/bin/bash" 6 seconds ago Up 6 seconds mycentos2
9100b6a7f74e centos:7 "/bin/bash" 7 hours ago Exited (0) 7 hours ago mycentos
c8ac7c654d8c hello-world "/hello" 8 hours ago Exited (0) 8 hours ago modest_raman
4.3 启动/停止容器和进入容器
如果想进入一个容器,首先必须确保它处于Up状态,否则进入不成功。
[root@localhost ~]# docker start mycentos
[root@localhost ~]# docker stop mycentos
[root@localhost ~]# docker exec -it mycentos bash
4.4 目录挂载
通过下面的命令,可以将宿主机的目录和docker的目录建立映射,修改同步。
[root@localhost ~]# docker run -di --name=mycentos3 -v /test:/test centos:7
4.5 查看容器信息
通过下面的命令可以查看容器的相关信息。
[root@localhost /]# docker inspect mycentos3
[root@localhost /]# docker inspect --format='{{.NetworkSettings.IPAddress}}' mycentos3
|