docker实战笔记一
容器命令
运行命令:
1. --name 指定容器名称2. -d 后台运行3. -port 指定端口映射规则4. --network 指定容器运行的网路模式5. -v 指定需要挂载的数据卷6. -env 指定需要传递给容器的环境变量
管理命令:
1. docker run --name={your_name} --d {image_name} (运行容器)2. docker ps -s -a {查看当前所有容器}3. docker stop {container_name} (停止容器)4. docker kill (container_name) {杀死容器}5. docker rm -f {container_name/id} (删除容器)6. docker ps -s (-s表明size)
用Docker搭建Jenkins服务
下载镜像
docker pull jenkins/jenkins
查看已下载的镜像
docker images
删除镜像
docker rmi jenkins/IMAGE ID
下载指定版本镜像
docker pull jenkins:3.1.x
将镜像打包成一个tar
docker save jenkins:2.60.3 > myjenkins.tar
将打包镜像加载出来
docker load < myjenkins.tar
给镜像加tag号
docker tag jenkins:latest jenkins:3.6.0
给镜像改名称
docker tag jenkins:latest testjenkins
push镜像到镜像仓库
docker tag jenkins gaofei_com/jenkinsdocker push
docker 运行jenkins实例
查看当前运行中的容器docker ps
如何删除这个启动的容器呢?是否可以和镜像一样,直接 rm
呢?
docker rm myjenkins
如果直接删除运行中的容器会报错,需要 先stop然后删除
``
docker stop myjenkinsdocker rm myjenkins
或者
docker rm -f myjenkins
如何指定端口号呢?就是使用 -p
参数
docker run -d --name=myjenkins -p 8080:8080 jenkins/jenkins
在启动的过程中,我们可能会碰到各种各样的问题,我们如何定位问题呢?
当然是使用 查看log大法
docker log -f myjenkins
Docker的数据持久化
mac系统下docker 安装jenkins前提需要安装完docker,在进行以下步骤操作:
1、为了方便容器内对配置文件进行修改,需要先创建Jenkins挂载目录并授权权限;
mkdir /data/jenkins_home
chmod 777 /data/jenkins_home
2、使用docker pull jenkins/jenkins命令,拉取Jenkins 镜像,等待安装完成;
部署Jenkins
部署命令如下:
3.docker run -d -p 8080:8080 -p 50000:50000 --name jenkins -v $(pwd)/data/jenkins_home:/var/jenkins_home jenkins/jenkins:lts
试试
以上参数解释:
docker run :通过镜像运行容器
--name:启动容器的名字,如:jenkins
-p:是将容器的8080端口映射到虚拟机的8080端口,在浏览器访问8080端口就能访问jenkins(50000端口映射的作用)
-v $(pwd)/data/jenkins_home 是将dokcer里面jenkins的目录/var/jenkins_home挂载到本地/data/jenkins_home
-d 以守护线程方式运行。不加该参数,关掉命令行,docker的jenkins就随之停止了。
4、查看Jenkins是否启动
命令:以下两种命令检查
docker ps
docker ps -a
终端显示:如图:status 状态显示up 即为启动jenkins服务成功,显示启动端口
5、初始化jenkins及安装插件
1)打开jenkins地址:http://localhost:8080/login,
2)安装插件,选择安装推荐的插件
3)进入插件安装界面,等待插件安装;
3)安装完插件后,进入创建管理员界面,然后点击底部使用admin账号登录
4)如图设置完成,点击开始使用jenkins,即可完整使用jenkins
6、清除docker容器
docker rm $(sudo docker ps -a -q)
7、查看docker日志
docker logs devops-jenkins
Docker 容器交互
docker exec -it {容器名称} bash
进入容器,exec的意思是在容器中运行一个命令。如果使用bash 并且指定了-it 就会打开容器的shell 交互
docker exec myjenkins echo "test"
docker exec myjenkins ping www.baidu.com
docker exec -it myjenkins bash
docker cp {container:name}:{container_path} {host_path}
把宿主机上的一个文件copy到容器中
docker cp 1.sh myjenkins:/var/jenkins_home
Docker的环境变量
有一些容器启动时,我们需要给他添加一些初始的参数,比如mysql,我们需要给他添加一些初始的账号和密码,docker如何操作这种情况呢?让我们动动小手,演练一下吧
- 启动mysql容器,注意要加
-e
传递参数 docker run --name some-mysql -v /home/a/test/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=1qaz9ol. -p 8888:3306 -d mysql:5.5 - 通过数据库连接工具连接数据库
host
要填写宿主机的ip地址,Password
是我们一开始设定的端口号
填写映射的宿主机的端口号 - 在数据库中创建一个表
- 删掉容器,然后重启
- 进入刚刚创建的容器内的mysql路径下,发现有刚刚添加的表,
这个就是容器的数据持久化的功能啦
-
我们接下来再思考一个问题,因为容器是有
隔离性
的。如果容器之间互相链接可以用什么方式?
这里就要引入另外一个参数啦
--link
,这个参数的作用就是把一台容器的网络信息,注入到另外一台容器中老方法,我们还是通过testlink实战,体验一下这个功能吧
- 启动mariadb docker run -d --name mariadb -e ALLOW_EMPTY_PASSWORD=yes -e MARIADB_USER=bn_testlink -e MARIADB_DATABASE=bitnami_testlink -v /home/a/test/mysql:/var/lib/mysql -p 8088:3306 bitnami/mariadb:latest
- 启动tesklink,mariadb的信息注入到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
- 查看日志,可以看到成功连接到mariadb docker logs -f testlink
-
一个思考题,如果是三个容器需要连接呢,使用什么样的方式?
答案是:--env
因为在docker中,--link
就是通过环境变量的方式配置的。Docker 前后端启动
现在很多网站的架构都是前后端分离,在这种情况下,我们应该如何使用docker分别启动前端和后端,且能互相通信呢?我们可以使用下面的命令
- docker run --name=conan -itd -p 8999:4200 conandocker run --name=holmes -itd --net=container:conan holmes
-
--net=container:conan
:这样创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围。其他命令
查看docker 的信息
docker info
获取容器/镜像的元数据
docker inspect myjenkins