【docker容器技术与K8s】
一、Docker容器技术
1、Docker的学习路线
(1)学习Docker基本命令(容器管理和镜像管理)
(2)学习使用Docker搭建常用软件
(3)学习Docker网络模式
启动容器的时候,有不同的网络模式(方案)供选择,不同的网络模式(方案)对应不同的场景
(4)学习Docker的镜像制作(dockerfile)
通过dockerfile制作自己的镜像
(5)容器集群-k8s
k8s是容器编排领域的事实标准。很少有公司会使用其他的编排方案了。
二、容器技术的价值
1、保证环境的一致性,只要使用相同镜像部署就可以保证一致性
2、轻量级虚拟化访问,(相比于虚拟机)运行更快(号称秒级启动),资源更小。同时也可以保证容器间的隔离性
3、封装部署的负载类型,云原生与微服务的首选技术方案。
4、未来测试人员必学的技术栈
三、Docker的安装与配置
Docker 支持多种操作系统平台,Windows、linux、macos
推荐使用linux
在Windows、macos安装Docker,实际上是在Windows、macos启动一个linux的子系统,来实现docker的安装
1、Centos上安装Docker
# 切换到管理员权限
su root
# 安装Docker依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
# 配置依赖下载源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装docker
yum makecache fast && yum -y install docker-ce
安装完成后,查看docker版本
docker --version
2、Docker基本命令
(1)常用操作
启动docker
systemctl start docker
重启docker(该指令会将docker先停止掉,然后再重新启动)
systemctl restart docker
开机自启动(设置开机自动启动docker)
systemctl enable docker
运行状态
systemctl status docker
3、 配置Docker镜像加速器
不配置加速器的话,docker拉取镜像时会去国外的dockerhub上下载,下载速度只有20kb/s左右。
配置加速器,下载速度根据自己的网速来定,下载速度可以达到10M/s左右。
# 添加 registry-mirrors
vim /etc/docker/daemon.json
# 内容
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
# 重载 docker 的配置文件
systemctl daemon-reload
# 重启 Docker
systemctl restart docker
## 查看配置(可以看到自己配置的国内源的地址)
docker info
四、Docker容器管理
docker常用的容器管理命令
1、查看当前的docker
docker ps -a
-a会显示包括非运行状态(比如Exited状态)的容器
2、运行容器
docker run --name={your_name} --d {image_name}
3、停止容器
docker stop {container_name}
4、kill容器
docker kill {container_name}
5、删除容器
docker rm -f {container_name}
6、查看容器日志
docker logs -f {容器名称}
7、查看容器的元数据
docker inspect {容器名称}
8、通过bash进入容器
docker exec -it {容器名称}
exec为在容器中运行一个命令。如果是bash,并指定了-it,就会打开容器的shell交互
五、Docker常用的镜像管理命令
1、镜像下载地址
下载地址: 镜像
使用docker pull会默认到镜像仓库里下载镜像
2、拉取镜像
docker pull {image_name}:版本号
# 例
docker pull mysql:5.5
3、推送镜像
docker push {image_name}
4、查看当前机器的所有镜像
docker images
5、删除当前机器的一个镜像
docker rmi {image_name}
# 例
docker rmi mysql:5.5
镜像被使用中,无法删除
6、为一个镜像打tag
docker tag {source_images_name:tag your_image_name:tag}
# 例,将下载的镜像mysql打一个tag为newmysql
# 此时,docker images | grep mysql查到的image ID是一样的
# 可以给一个镜像打很多tag,但实际上指的是同一个镜像
docker tag mysql newmysql
7、将image保存为tar
docker save mysql > mysql.tar
# 执行后,生成文件mysql.tar
8、load image
docker load < busybox.tar.gz
六、Docker安装jenkins
1、搭建指令
docker run --name myjenkins -itd -p 5003:8080 -p 50000:50000 --restart always --privileged=true --user root --env JAVA_OPTS="-Xmx8192m" -v $(pwd)/jenkins_data:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -v /bin/docker:/bin/docker jenkins/jenkins:lts
–name : 指定容器名称
-d : 后台运行
-p : 设置端口映射(8080端口为jenkins的主服务,web服务的端口,50000为jenkins的slave要连接的端口号)
–restart : 如果容器因为异常原因crash了,报错退出运行了,那么docker会自动帮忙重启
–privileged=true :为了安全着想,默认关闭了一些权限,在jenkins中把它打开,希望jenkins可以调用docker
-v : 将文件docker.sock挂载到容器的/bin/docker:/bin/docker,容器里的jenkins就会读这个文件调docker。但默认调docker会有一些权限相关的问题。所有用–privileged=true开启特权权限。用–user root表示启动容器的时候使用root用户进行启动,如果不指定的话,会使用jenkins的默认用户(jenkins)
–env : 指定环境变量
-v : 文件挂载,将jenkins_home挂载出来
2、通过网址访问jenkins服务
七、Docker搭建数据库服务MySQL
1、搭建指令
docker run --name myr-mysql -v /home/myr/service/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=1qaz9ol. -p 8888:3306 -d mysql:5.5
2、通过网址访问数据库MySQL
八、Docker搭建项目管理平台Jira
1、搭建指令
docker run --name myr-jira -v /home/myr/service/jira:/var/atlassian/application-data/jira -d -p 5004:8080 atlassian/jira-software
2、通过网址访问项目管理平台Jira
九、Docker搭建测试用例管理平台testlink
testlink没有办法自己保存自己的数据,需要借助数据库保存
所以搭建testlink,实际上需要两行命令,也就是要启动两个容器
容器启动的时候,docker生成的随机的ip地址,docker的ip地址是会变的,每次启动的时候都去查一下ip是很麻烦的。而且这个ip地址是虚拟的ip地址,不经过路由表。启动容器的时候,是没有办法指定ip地址的。
问题:一个容器要往另一个容器发送请求的话,是需要知道它的ip地址的。解决方法:–link,将两个容器进行链接,让这两个容器可以通信。
1、搭建指令
docker run -d --name myr_mariadb -e ALLOW_EMPTY_PASSWORD=yes -e MARIADB_USER=bn_testlink -e MARIADB_DATABASE=bitnami_testlink -v /home/myr/service/mysql:/var/lib/mysql -p 8088:3306 bitnami/mariadb:latest
docker run -d --name myr_testlink -p 5005:8080 -p 444:443 -e ALLOW_EMPTY_PASSWORD=yes -e TESTLINK_DATABASE_USER=bn_testlink -e TESTLINK_DATABASE_NAME=bitnami_testlink --link myr_mariadb bitnami/testlink-archived
testlink未正常启动,原因待查
十、Docker搭建代码管理仓库Gitlab
1、搭建指令
# 拉取Gitlab镜像
docker pull gitlab/gitlab-ce:latest
# 启动容器
docker run --name myr_gitlab -itd -p 5006:80 -p 9922:22 -v /home/gitlab/etc:/etc/gitlab -v /home/gitlab/log:/var/log/gitlab -v /home/gitlab/opt:/var/opt/gitlab --restart always --privileged=true --name gitlab gitlab/gitlab-ce
-p 5006:80
将容器内80端口映射至宿主机5006端口,用于访问gitlab
-p 9922:22
将容器内22端口映射至宿主机9922端口,用于访问ssh
2、
#进容器内部
docker exec -it gitlab /bin/bash
#修改gitlab.rb
vi /etc/gitlab/gitlab.rb
#加入如下
#gitlab访问地址,可以写域名。如果端口不写的话默认为80端口
external_url 'http://192.168.56.101'
#ssh主机ip
gitlab_rails['gitlab_ssh_host'] = '192.168.56.101'
#ssh连接端口,9922,用于访问ssh
gitlab_rails['gitlab_shell_ssh_port'] = 9922
# 让配置生效
gitlab-ctl reconfigure
### 注意不要重启,/etc/gitlab/gitlab.rb文件的配置会映射到gitlab.yml这个文件,
### 由于在docker中运行,在gitlab上生成的http地址应该是http://192.168.56.101:5006,所以,要修改下面文件
3、
# 修改http和ssh配置
vi /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml
gitlab:
host: 192.168.56.101
port: 5006 # 这里改为5006,用于访问gitlab
https: false
4、退出容器
5、访问gitlab
十一、Docker官方镜像网站
https://hub.docker.com/