docker安装与使用记录(debian9)

win10 通过Xshell连接linux机子

安装

https://www.runoob.com/docker/debian-docker-install.html
安装基本参照这个网址,没遇到什么坑

$ sudo apt-get remove docker docker-engine docker.io containerd runc

$ sudo apt-get update

$ sudo apt-get install 
    apt-transport-https 
    ca-certificates 
    curl 
    gnupg2 
    software-properties-common

$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -

$ sudo apt-key fingerprint 0EBFCD88

$ sudo apt-get install docker-ce docker-ce-cli containerd.io

验证

$ sudo docker run hello-world

使用

1.使用国内加速器

https://www.runoob.com/docker/docker-mirror-acceleration.html
基本按照这个网址进行设置,但是也遇到坑了,折腾好久

  • 首先新建文件daemon.json文件,因为docker安装默认是没有daemon.json文件。
    ls -a 在/etc/docker路径下,查看文件,确实没有daemon.json文件
    新建文件:touch daemon.json
  • 编辑daemon.json文件
    这里踩了个坑vi daemon.json,一直弹出一个警告Found a swap file by the name ".daemon.json.swp"

    对Linux不熟,查了半天才知道.swp文件是vi编辑器非正常关闭下生成的缓存文件,有这个存在的时候会弹出这个警告,使用命令进行删除即可rm .daemon.json.swp ,再次vi daemon.json编辑即可
  • 在文件中输入以下内容,并保存
{
  "registry-mirrors": [
    "https://hub-mirror.c.163.com/"
  ]
}
  • 重启服务
sudo systemctl daemon-reload
sudo systemctl restart docker

2.下载jenkins

https://hub.docker.com/
在这里搜索Jenkins(注:需要注册登录)
https://hub.docker.com/_/jenkins?tab=tags 最后在这里复制想要的版本pull命令
(更换为国内镜像docker pull jenkinszh/jenkins-zh,不然插件死都下不了 https://blog.csdn.net/loveLifeLoveCoding/article/details/105774844?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase
jenkins中文社区 https://jenkins-zh.cn/
回到xshell,把命令粘贴,等待下载结束

3.查看已安装的镜像 docker images


第1列repository: 镜像目录名称
第2列tag: 版本号
第3列IMAGE ID: 镜像的id
第4列CREATED: 镜像安装的时间
第5列SIZE:镜像的大小

4.运行jenkins docker run -d --name myjenkins -p 8081:8080 jenkinszh/jenkins-zh

  -d : 后台运行
  --name :指定别名
  -p :端口映射,把宿主机的8081端口映射到容器的8080端口
  -e :指定环境变量 

5.查看正在运行的镜像 docker ps

6.查看日志 docker logs -f myjenkins

日志里有一行
Please use the following password to proceed to installation:
下面写的就是Jenkins的登陆密码

7.打开Jenkins

  • 1.win10打开浏览器输入Linux的ip地址加端口号8081(刚做端口映射的那个端口)
    http://192.168.2.4:8081
  • 2.输入Jenkins的密码(在第6点看到的那个)
  • 3.登陆成功Jenkins
  • 4.直接选择 install suggested plugins ,选择推荐的方式安装
    1. 创建账户或使用admin直接登陆。我这里直接使用admin
    1. 一路保存,最后

8.保存容器中的数据

把宿主机上的某个目录挂载在容器中的目录上,容器运行过程需要的数据均保存在宿主机上,如此,即使容器被误删数据依然可以在宿主机上找到
docker run --name myjenkins -itd --network host -v /home/test/jenkins_data:/var/jenkins_home --env JAVA_OPTS="-Xmx8192m" jenkinszh/jenkins-zh
-v : 把宿主机的/home/test/jenkins_data挂载到容器的/var/jenkins_home

9.关闭运行的jenkins,并删除

docker stop myjenkins

docker rm myjenkins

10.删除镜像
docker rmi [image]




docker命令整理

  • 运行Jenkins。
    docker run --name myjenkins -itd --network host -p 8081:8080 -v /home/test/jenkins_data:/var/jenkins_home --env JAVA_OPTS="-Xmx8192m" jenkinszh/jenkins-zh
    参数:
    --name : 指定容器名
    -i  : 以交互模式运行容器,通常与 -t 同时使用
    -t  : 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
    -d  : 以后台的方式运行容器,并返回容器id
    --network  :指定容器的网络连接类型 支持 bridge/host/none/container: 四种类型
    -p :端口映射,把宿主机的8081端口映射到容器的8080端口
    -v :文件挂载,把宿主机的/home/test/jenkins_data挂载到容器的/var/jenkins_home
    --env或 -e : 设置环境变量
  • 运行mariadb。
docker run --name mymariadb 
-e ALLOW_EMPTY_PASSWORD=yes 
-e MARIADB_USER=my_user 
-e MARIADB_PASSWORD=my_password 
-e MARIADB_DATABASE=my_database 
-v /home/test/mariadb_data:/bitnami/mariadb
-p 3306:3306 
bitnami/mariadb:latest

参数:

-e ALLOW_EMPTY_PASSWORD=yes 设置环境变量,允许数据库密码为空
-e MARIADB_USER=my_user   设置环境变量,数据库用户名为my_user
-e MARIADB_PASSWORD=my_password  设置环境变量,数据库密码为my_password  
-e MARIADB_DATABASE=bitnami_testlink #初始化数据库时的实例的名字
  • 容器交互命令,在容器里面执行一条命令,如果执行的命令时bash,相当于在容器中打开了bash窗口与db交互
    docker exec -it mariadb bash
  • 运行testlink
docker run -d --name testlink -p 8099:80 -p 444:443 -e ALLOW_EMPTY_PASSWORD=yes -e
TESTLINK_DATABASE_USER=bn_testlink -e TESTLINK_DATABASE_NAME=bitnami_testlink --link mariadb
bitnami/testlink:latest

参数:
--link mariadb 把mariadb注入testlink(把容器mariadb的网络信息以环境变量的形式注入容器testlink

踩坑记录:

  1. 挂载文件后,执行docker logs -f myjenkins报错
    cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied

    解决方法:
    https://segmentfault.com/a/1190000008618462
    简单来说,就是权限不够,-v /home/test/jenkins_data:/var/jenkins_home 把/var/jenkins_home映射到了宿主机的目录文件/home/test/jenkins_data上,但是宿主机的这个目录权限是给root的。需要改为容器里的jenkins。
    chown -R 1002:1002 /home/test/jenkins_data
    其中1002为当前用户的uid。通过cat /ect/passwd查看,找到当前登陆用户,即可获得uid
    再次执行
    docker run --name myjenkins -d -p 8081:8080 -v /home/test/jenkins_data:/var/jenkins_home jenkinszh/jenkins-zh
    docker logs -f myjenkins
    没有报错。
原文地址:https://www.cnblogs.com/congyinew/p/12864716.html