Docker

docker

1.docker组成

1.1镜像(Image)

docker镜像就好比一个模板,我们可以通过这个模板来创建容器服务,tomcat镜像=>run==>tomcat01容器(提供服务器),通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)

1.2容器(container)

docker利用容器技术,独立运行一个或者一组应用 通过镜像来创建启动,停止,删除,基本命令!
目前就可以把这个容器理解为就是一个简易的linux系统

1.3仓库(repository)

存放镜像的地方,也分为公有仓库和私有仓库

2.docker安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 1.卸载旧的版本
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
# 2.需要的安装包
yum install -y yum-utils
# 3.设置镜像的仓库
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo # 默认是从国外的。
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 推荐使用阿里云的。
# 安装容器之前,更新yum软件包索引。
yum makecache fast
# 4.安装容器相关的。docker-ce(社区版)docker-ee(企业版)
yum install docker-ce docker-ce-cli containerd.io
# 5.启动docker
systemctl start docker
# 6.使用docker version查看是否安装成功

2.1测试安装

1
2
docker -v #查看版本
docker run hello-world # 测试hello-world

2.2查看镜像

1
docker images -a # 查看所有镜像

2.3查看容器

1
docker ps -a #查看所有容器(不管启动还是停止)

3.docekr使用

3.1帮助命令

1
2
3
docker version        # 显示docker的版本信息
docker info # 显示docker的系统信息,包括镜像和容器的数量
docker --help # 帮助命令

3.2镜像命令

1
2
3
4
5
6
7
docekr images -a #显示所有镜像
docker images -q #仅显示镜像id
#REPOSITORY 镜像的仓库源
#TAG 镜像的标签
#IMAGE ID 镜像的id
#CREATED 镜像的创建时间
#SIZE 镜像的大小

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
docker search#搜索镜像,命令参数可选
# 下载镜像:docker pull 镜像名[:tag]
[root@iZbp13qr3mm4ucsjumrlgqZ ~]# docker pull mysql
Using default tag: latest # 如果不写tag,默认就是latest,最新的版本
latest: Pulling from library/mysql
72a69066d2fe: Pull complete # 分层下载,docker image的核心,联合文件下载
93619dbc5b36: Pull complete
99da31dd6142: Pull complete
626033c43d70: Pull complete
37d5d7efb64e: Pull complete
ac563158d721: Pull complete
d2ba16033dad: Pull complete
688ba7d5c01a: Pull complete
00e060b6d11d: Pull complete
1c04857f594f: Pull complete
4d7cfa90e6ea: Pull complete
e0431212d27d: Pull complete
Digest: sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709 #签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest # 真实地址
# 两个命令是等价的
docker pull mysql
docker pull docker.io/library/mysql:latest
# 指定版本下载
[root@iZbp13qr3mm4ucsjumrlgqZ ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
72a69066d2fe: Already exists # 联合文件下载,已经存在的资源可以共用
93619dbc5b36: Already exists
99da31dd6142: Already exists
626033c43d70: Already exists
37d5d7efb64e: Already exists
ac563158d721: Already exists
d2ba16033dad: Already exists
0ceb82207cd7: Pull complete
37f2405cae96: Pull complete
e2482e017e53: Pull complete
70deed891d42: Pull complete
Digest: sha256:f2ad209efe9c67104167fc609cca6973c8422939491c9345270175a300419f94
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
1
2
3
[root@JWei_0124 //]# docker rmi -f 镜像id                    # 删除指定的镜像
[root@JWei_0124 //]# docker rmi -f 镜像id 镜像id 镜像id # 删除多个镜像(空格分隔)
[root@JWei_0124 //]# docker rmi -f $(docker images -aq) # 删除全部的镜像

3.3容器命令

新建容器并启动

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
docker run [可选参数] image
# 参数说明
--name="name" 容器名字:用来区分容器
-d 后台方式运行:相当于nohup
-it 使用交互式运行:进入容器查看内容
-p 指定容器的端口(四种方式)小写字母p
-p ip:主机端口:容器端口
-p 主机端口:容器端口
-p 容器端口
容器端口
-P 随机指定端口(大写字母P)
# 测试:启动并进入容器
[root@JWei_0124 module]# docker run -it centos /bin/bash
[root@f8fad61a6c96 /]# ls # 查看容器内的centos(基础版本,很多命令都是不完善的)
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var

# 从容器中退回到主机
[root@f8fad61a6c96 /]# exit
exit
[root@JWei_0124 module]#
[root@JWei_0124 /]# ls
bin boot dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var www

列出所有的容器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
docker ps    # 列出当前正在运行的容器
# 命令参数可选项
-a # 列出当前正在运行的容器+历史运行过的容器
-n=? # 显示最近创建的容器(可以指定显示几条,比如-n=1)
-q # 只显示容器的编号

[root@JWei_0124 //]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@JWei_0124 //]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f8fad61a6c96 centos "/bin/bash" 2 minutes ago Exited (0) About a minute ago epic_greider
b4b5e50d9889 centos "/bin/bash" 2 minutes ago Exited (0) 2 minutes ago suspicious_mendeleev
321c5e25bca9 feb5d9fea6a5 "/hello" 2 hours ago Exited (0) 2 hours ago wonderful_saha
[root@JWei_0124 //]# docker ps -a -n=1
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f8fad61a6c96 centos "/bin/bash" 2 minutes ago Exited (0) About a minute ago epic_greider
[root@JWei_0124 //]#

退出容器

1
2
3
4
5
6
7
8
9
10
exit        # 容器直接停止,并退出
ctrl+P+Q # 容器不停止,退出
[root@JWei_0124 //]# docker run -it centos /bin/bash //交互式进入
[root@68b68a9576e0 /]# [root@JWei_0124 //]# //按快捷键 自动输入
[root@JWei_0124 //]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
68b68a9576e0 centos "/bin/bash" 2 minutes ago Up 2 minutes peaceful_jemison
[root@JWei_0124 //]#


删除容器

1
2
3
4
5
6
docker stop []#停止容器
docker rm [容器id] # 删除容器(不能删除正在运行的容器)如果要强制删除:docker rm -f 容器id
docker rmi []#删除镜像
docker rm -f $(docker ps -aq) # 删除全部容器
docker ps -a -q|xargs docker rm # 删除所有容器

登录和启动容器

1
2
3
4
5
docker start 容器id        # 启动容器
docker restart 容器id # 重启容器
docker stop 容器id # 停止当前正在运行的容器
docker kill 容器id # 强制停止当前容器