什么是容器

作为稍懂服务器的人都知道服务器是有系统的,一般来说是linux系统,我们可以在里边操作各种,比如说安装nginx、部署服务、数据库等。简单来说,容器理解成一个超精简的linux系统,可以进入这个系统进行安装各种服务,我们从网上pull下来的快照(image)就相当于 一个精简的linux系统,里边安装了需要的服务,如 nginx的快照相当于精简linux里安装了个nginx。下载下来的快照(image)启动后生成容器,我们进入容器,依然可以对容器内的东西指手画脚。

下边的内容主要将 完整的功能放在了 “ 安装linux(完整)” 里,其他的都是精简可用,不做过多重复

一、 安装linux(完整)

目前为止docker hub 还是被封着,用阿里云、腾讯云镜像找一找版本直接查就行 默认使用latest最新版

#:latest 可以不写。

docker pull centos:latest

# 拉取后查看 images

docker images

#给镜像设置标签

# docker tag [images的IMAGE_ID列的值] [名字:版本]

# 例如:

docker tag 5d0da3dc9764 mycentos:V1

# 删除image

#docker rmi [IMAGE_ID的值或者 名字:版本]

#例如

docker rmi 5d0da3dc9764

docker 启动镜像

# -i 交互

# -t 终端

# -d 可后台运行

# --name 生成container 的名字

# docker run -itd --name="[自定义名字]" [image的id 或者镜像名字:版本号]

# 例如

docker run -itd --name="testMyCentos" mycentos:V1

# 查看启动的程序

docker ps

# 查看所有程序

docker ps -a

#启动的老三样 start restart stop

# docker start [container的id或者name] 这里的id就不是image的id了,不是同一个东西喔

# 例如

docker start 6d6981426274

#移除container

#docker rm [container的id或者name]

#例如

docker rm 6d6981426274

进入镜像中

docker attach

# exec 的时候退出不会停止container 但attach会

docker exec

#进入后就是一个正常的系统啦

# exec需要参数 例如

docker exec -it d82b7255ba57 /bin/bash

查看ip、ping、以及保存新镜像

# 查看ip

# 进容器先更新apt

apt-get update

# 加载net网络

apt install net-tools

# 加载 ping

apt-get install inetutils-ping

# 如上,我们在容器中加入了一些新的东西,为了方便后续使用,可以保存新的image

# 这样我们使用自己保存的image 生成的容器就会自带 net网络和 ping,当然加入其他属性也是一样的

# 退出容器

exit

# 复制镜像

#docker commit -m= "描述信息" -a="作者" [要复制的容器的IMAGE_ID列的值] [名字:版本]

# 例如

docker commit -m="test" -a="vace" 5d0da3dc9764 vace/centos:v1

# 查看image

查看网络端口号、进程、底层信息、日志

#查看网络端口号

docker port 6d6981426274

# 查看docker 的进程

docker top 6d6981426274

#查看docker 的底层信息

docker inspect 6d6981426274

# 日志查看

docker logs -f 6d6981426274

容器的导入和导出

#导出容器

# docker export [容器的id] > ubuntu.tar

#例如

docker export d82b7255ba57 > mysql.tar

# 导入容器

# cat [当前目录下直接地址或者根目录地址] | docker import - [名字:版本]

cat mysql.tar | docker import - test/mysql:v1

# 或使用 远程地址

docker import http://localhost/repo/docker/mysql.tar test/mysql:v1

二、 安装ubuntu(精简)

# 拉image

docker pull ubuntu:latest

# 查询

docker images

# 运行

docker run -itd --name myUbuntu ubuntu

#查容器

docker ps

三、 安装nginx (精简)

docker pull nginx:latest

docker images

# -d 可后台运行

# -p 指定物理机端口号和容器端口号进行绑定 -P不指定端口号(默认)

docker run --name myNginx -p 8080:80 -d nginx

配置nginx

方案一: 将nginx容器里的config文件复制出来,编辑后再放进去

docker cp accfb55471fd:/etc/nginx/nginx.conf nginx.conf

# 编辑完成将文件放回去

docker cp nginx.conf accfb55471fd:/etc/nginx/nginx.conf

# 重启nginx

方案二: nginx容器中安装 vim

# 进容器先更新apt

apt-get update

# 安装 vim

apt install vim

# 接下来 就可以正常编辑 config文件啦

vim -v /etc/nginx/nginx.conf

# 重启nginx

方案三:使用 Dockerfile 重构容器

关于nginx.config 在这里可以直接用 虚拟ip ,也可以用桥接网络的容器名(需要单独设置网络喔) 详情看 “五. 网络连接”

四. 安装mysql

docker pull mysql:8.0.19

docker images

docker run -itd --name myMysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql

进入容器添加用户权限

# 进入容器

# docker exec -it [容器id] /bin/bash

# exec需要参数 例如

docker exec -it d82b7255ba57 /bin/bash

#输入密码 MYSQL_ROOT_PASSWORD的值,这里是 123456

mysql -uroot -p

#进入mysql 创建用户,外网可访问

CREATE USER 'user'@'%' IDENTIFIED WITH mysql_native_password BY 'root';

GRANT ALL PRIVILEGES ON *.* TO 'user'@'%';

show grants for 'user'@'%';

FLUSH PRIVILEGES;

# 退mysql

exit;

# 退容器

exit;

五. 网络连接

创建网络连接可以允许容器间的互相通信

docker network create -d bridge myNetwork

# 创建network 连接

# 方法一

docker network connect myNetwork myMysql

docker network connect myNetwork myNginx

#重新启动容器

docker restart myMysql

docker restart myNginx

# 方法二 在创建容器的时候直接添加网络 --network

#docker run -itd --name myMysql --network myNetwork -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql

#docker run --name myNginx -p 8080:80 -d nginx

调试

进入其中一个容器

docker exec -it d82b7255ba57 /bin/bash

apt-get update

apt-get install inetutils-ping

ping myNginx

查看网络

# 查看所有网络

docker network ls

# 创建容器时默认会将容器添加进bridge 的网络中, ping ip的时候是可以ping通的

# 查看网络明细

docker network inspect 900b057a1f53

# 其中的"Containers"中的内容就代表了当前网络下的所有容器地址

参考链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。