Docker学习笔记

Docker 虚拟机架构

image-20180605222341407

Docker创建的所有虚拟实例共用同一个Linux内核,对硬件占用较小,属于轻量级虚拟机。

PaaS:在Docker中安装了一些软件

SaaS:安装好系统的容器

Docker镜像与容器

image-20180605223418184

容器是可运行的,镜像是不可运行的。

Centos安装Docker

更新yum再安装Docker

1
2
yum -y update
yum install docker -y

管理Docker虚拟机

1
2
3
启动:service docker start
关闭:service docker stop
重启:service docker restart

Docker虚拟机管理命令

image-20180605224603596

在线安装镜像

我们可以使用search命令搜索镜像然后拉取安装,不过国外镜像下载速度慢,建议使用国内镜像仓库,如DaoCloud。

下面我们配置加速器:

在DaoCloud官网注册找到加速器页面获得指令:

1
2
3
4
5
[root@hongshaorou ~]# curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://7af8d782.m.daocloud.io
docker version >= 1.12
{"registry-mirrors": ["http://7af8d782.m.daocloud.io"],}
Success.
You need to restart docker to take effect: sudo systemctl restart docker

执行的结果是在/etc/docker下增加了一个配置文件,不过多了一个 ,,我们编辑文件将其删除。

1
[root@hongshaorou ~]# vim /etc/docker/daemon.json

修改之后我们的加速器就生效了,现在我们搜索一个关于java的镜像将其从镜像源拉取下来。

搜索:

1
2
3
4
5
6
[root@hongshaorou ~]# docker search java
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/node Node.js is a JavaScript-based platform for... 5656 [OK]
docker.io docker.io/tomcat Apache Tomcat is an open source implementa... 1868 [OK]
docker.io docker.io/java Java is a concurrent, class-based, and obj... 1729 [OK]
docker.io docker.io/openjdk OpenJDK is an open-source implementation o... 990

拉取指定的镜像:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@hongshaorou ~]# docker pull docker.io/java
Using default tag: latest
Trying to pull repository docker.io/library/java ...
latest: Pulling from docker.io/library/java
5040bd298390: Pull complete
fce5728aad85: Pull complete
76610ec20bf5: Pull complete
60170fec2151: Pull complete
e98f73de8f0d: Pull complete
11f7af24ed9c: Pull complete
49e2d6393f32: Pull complete
bb9cdec9c7f3: Pull complete
Digest: sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d
Status: Downloaded newer image for docker.io/java:latest

查看有哪些镜像:

1
2
3
[root@hongshaorou ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/java latest d23bdf5b1b1b 16 months ago 643 MB

导出导入镜像

1
2
3
导出镜像:docker save docker.io/java > /home/java.tar.gz
导入镜像:docker load < /home/java.tar.gz
删除镜像:docker rmi java

启动容器

启动镜像会创建一个运行状态的容器

启动容器并给容器命名:
1
2
3
4
5
[root@hongshaorou ~]# docker run -it --name myjava docker.io/java bash
root@ad433732991b:/#
-it:启动容器后开启交互界面
--name:给容器起一个名字
bash:表示执行bash命令
启动容器并映射端口
1
2
3
[root@hongshaorou ~]# docker run -it --name myjava -p 9000:8080 -p 9001:8085 docker.io/java bash
root@6ffaf7b23ce8:/#
-p:表示开启端口映射 将宿主机的9000映射到docker主机的8085 有多个端口映射就要有多个 -p
启动容器并映射目录

数据一定要在容器之外保存

1
2
3
[root@hongshaorou ~]# docker run -it --name myjava -v /home/project:/soft --privileged java bash
-v:表示开启目录映射 将宿主机文件映射到docker主机
--privileged:表示映射到docker的时候权限是最高的

暂停和停止容器

1
2
3
4
暂停容器:[root@hongshaorou ~]# docker pause myjava
恢复容器:[root@hongshaorou ~]# docker unpause myjava
停止容器:[root@hongshaorou ~]# docker stop myjava
启动容器:[root@hongshaorou ~]# docker start -i myjava

我们在容器shell中直接执行exit相当于stop容器。

删除容器

删除容器之前我们要彻底停止容器

1
[root@hongshaorou ~]# docker stop myjava

删除

1
2
[root@hongshaorou ~]# docker rm myjava
myjava

查看还有哪些容器

1
2
3
[root@hongshaorou ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6ffaf7b23ce8 docker.io/java "bash" 14 minutes ago Exited (0) 5 minutes ago myjava2
知识就是财富
如果您觉得文章对您有帮助, 欢迎请我喝杯水!