docker更改image docker更改端口_centos7 docker端口


准备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

docker更改image docker更改端口_docker拉取镜像失败_02


(ps.之前被知乎误删除,现在已经回来了^^)