准备CenOs7操作系统
docker是为了Linux设计的环境搭建工具,虽然有Windows版本,但是不建议使用Windows版,本文所有操作基于Linux的CentOs7发行版,如果不会搭建虚拟机可以关注我,后续会提供相关教程。
准备好centos7系统后完成IP配置,用ssh工具登录。
使用脚本自动安装-docker
curl -fsSL get.docker.com -o get-docker.sh
sh get-docker.sh --mirror Aliyun
启动Docker进程
systemctl enable docker #设置默认开机启动
systemctl start docker #启动docker
检查docker是否安装成功
[root@localhost ~]# docker --version
Docker version 19.03.13, build 4484c46d9d
配置docker国内源
/etc/docker/daemon.json
中写入如下内容(如果文件不存在请新建该文件:mkdir /etc/docker&&touch daemon.json)
{
"registry-mirrors": [
"https://a7z8cvus.mirror.aliyuncs.com",
"https://dockerhub.azk8s.cn",
"https://reg-mirror.qiniu.com"
]
}
注意,内容格式必须符合json要求,否则会导致docker启动失败!建议直接赋值以上文本即可
输入以下命令重启docker
systemctl daemon-reload
systemctl restart docker
docker练习-拉取镜像
想要运行容器必须提前下载好对应的镜像,比如我们想运行一个mysql5.6版本的容器,那么我们需要先在本地有这个镜像才能运行。
镜像需要在镜像仓库上去下载,就像代码是托管在代码仓库上的,默认情况下我们需要从公有仓库,也就是
[dockerhub] https://hub.docker.com/
上下载镜像。
dockerhub上有海量的镜像供我们选择,我们构建环境的时候可以直接下载其中的镜像来使用
比如下载一个mysql5.6镜像
[root@localhost ~]# docker pull mysql:5.6
5.6: Pulling from library/mysql
babf97a3f00a: Pull complete
88031ca211be: Pull complete
be1b1d426cba: Pull complete
ff53757c5bd8: Pull complete
53127b7bc50a: Pull complete
e4f269bc946e: Pull complete
0c0f95c5641f: Pull complete
3b6c8aee8eab: Pull complete
423995312f2c: Pull complete
d6774a794ead: Pull complete
1b1b7c16ee58: Pull complete
Digest: sha256:8f24bff8b42841943e0c33f229aedd5a5a5dd87323164be1cb9003bfa0b2042f
Status: Downloaded newer image for mysql:5.6
docker.io/library/mysql:5.6
这个拉取的语法是
docker pull 镜像:Tag
如果不加标签,默认会拉取最新版本的镜像,即latest
如:docker pull nginx
[root@localhost ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
bb79b6b2107f: Pull complete
111447d5894d: Pull complete
a95689b8e6cb: Pull complete
1a0022e444c2: Pull complete
32b7488a3833: Pull complete
Digest: sha256:ed7f815851b5299f616220a63edac69a4cc200e7f536a56e421988da82e44ed8
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
拉取的镜像默认保存到了系统的/var/lib/docker/
目录下面,可以通过一个简单的命令查看当前系统有哪些docker镜像
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest f35646e83998 2 days ago 133MB
mysql 5.6 4f36ba851740 2 days ago 302MB
之前安装的myslq和nginx镜像都能看到。
docker练习-创建容器
有了镜像,我们可以基于镜像来运行容器。
启动容器的命令语法是
docker run <options> 镜像:tag commands
这里解释一下,options表示选项,用于运行容器时一些额外的配置,commands表示运行在容器内部的命令,比如容器内部要运行一个python脚本,commands可以替换为 python commands。
常用的选项有:
-d 指定容器运行后台
-i 用于控制台交互
-t 支持终端登录,通常和-i参数一起使用
-p 映射容器端口,用法:-p 宿主机端口:容器端口
-v 挂载容器存储卷,用法:-v 宿主机路径:容器路径
--name=“container_name” 指定容器的名称
--rm 退出容器时删除容器
--restart=“always” 停止容器时是否自动重启
案例:运行一个mysql容器
docker run -it -p 3306:3306 -e MYSQL_ROOT_PASSWORD=devops mysql:5.6
这个时候我们看到容器内部的运行情况了
2020-10-16 04:39:02 1 [Note] Server hostname (bind-address): '*'; port: 3306
2020-10-16 04:39:02 1 [Note] IPv6 is available.
2020-10-16 04:39:02 1 [Note] - '::' resolves to '::';
2020-10-16 04:39:02 1 [Note] Server socket created on IP: '::'.
2020-10-16 04:39:02 1 [Warning] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.
2020-10-16 04:39:02 1 [Warning] 'proxies_priv' entry '@ root@0d13dc652f11' ignored in --skip-name-resolve mode.
2020-10-16 04:39:02 1 [Note] Event Scheduler: Loaded 0 events
2020-10-16 04:39:02 1 [Note] mysqld: ready for connections.
Version: '5.6.49' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server (GPL)
mysql服务默认监听3306端口,但是容器内部的网络和宿主机不在一个网段,所以我们把该端口映射到了宿主机的3306端口,现在我们通过访问宿主机的3306端口就可以访问mysql了
此时我们的进程是运行在前台的,如果关闭窗口就可能造成容器进程退出,所以如果想让容器一直不退出,可以在运行的时候加上-d参数,让容器进程作为守护进程。
docker run -it -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=devops --name="db_mysql" mysql:5.6
此时可以通过 docker ps
命令查看运行中的容器
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0d13dc652f11 mysql:5.6 "docker-entrypoint.s…" About an hour ago Up About an hour 0.0.0.0:3306->3306/tcp laughing_galois
若容器在运行过程中发生异常而退出,docker ps命令是看不到终止的进程的,可以通过-a参数列出所有的进程,包括已经停止的(状态为Exited)
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0d13dc652f11 mysql:5.6 "docker-entrypoint.s…" About an hour ago Up About an hour 0.0.0.0:3306->3306/tcp laughing_galois
282438a29adb mysql:5.6 "docker-entrypoint.s…" About an hour ago Exited (1) About an hour ago
我们可以通过start和stop 来启动或停止一个容器 参数为容器ID或者容器名
如:
[root@localhost ~]# docker stop 0d13dc652f11 #停止一个容器
0d13dc652f11
[root@localhost ~]# docker start 0d13dc652f11 #恢复停止中的容器
0d13dc652f11
不错,现在你已经学会如何简单的使用docker了,想要进一步提高可以参考这篇:
海文:小白docker进阶篇zhuanlan.zhihu.com
(ps.之前被知乎误删除,现在已经回来了^^)