主要记录下自己平时经常使用到的命令,会持续完善。
Docker 部署
以部署 Jenkins 为例
1.拉取 docker 镜像
docker pull jenkins/jenkins:lts
2.启动容器(需要限制硬件的使用)
docker run -d --cpus=".5" -m 1g --memory-swap 0 --restart=always -p 8080:8080 -p 50000:50000 -v jenkins-data:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock jenkins/jenkins:lts
3.查看默认密码
cat /var/jenkins_home/secrets/initialAdminPassword
4.修改容器的时间和时区
docker cp /usr/share/zoneinfo/Asia/Shanghai {容器id}:/etc/localtime
5.容器内安装node
# 连接容器命令行
docker exec -u root -it {容器id} /bin/bash
mkdir /opt/node
cd /opt/node
wget https://nodejs.org/dist/v10.16.3/node-v10.16.3-linux-x64.tar.xz
tar -xvf node-v10.16.3-linux-x64.tar.xz
rm -rf node-v10.16.3-linux-x64.tar.xz
cd node-v10.16.3-linux-x64/
ln -s /opt/node/node-v10.16.3-linux-x64/bin/node /usr/bin/node
ln -s /opt/node/node-v10.16.3-linux-x64/bin/npm /usr/bin/npm
ln -s /opt/node/node-v10.16.3-linux-x64/bin/npx /usr/bin/npx
node -v
exit
列出容器
docker ps
# 显示所有的容器,包括未运行的。
docker ps -a
列出本地镜像
docker images
删除本地一个或多少镜像
docker rmi xxx/ubuntu:v4
# 强制删除
docker rmi -f xxx/ubuntu:v4
推送镜像到 Docker Hub
用户名必须已在dockerhub注册
docker push sherlocky/springboot-gradle-docker-demo
连接容器命令行
# Docker 1.3.X+
docker exec -it {容器id} /bin/bash
## 还可指定 root 用户
docker exec -it {容器id} -u root /bin/bash
查看日志
docker logs -f {容器id}
## 追踪最近30分钟的日志
docker logs -f --since 30m {容器id}
修改docker 容器时区
docker cp /etc/localtime xxx:/etc/localtime
将现有容器打成镜像
docker commit -a "Sherlock" -m "Sherlock's xxx镜像,基于jenkins:lts官方镜像(20191227)" -p {容器id} Sherlock/jenkins:lts
save 导出镜像
docker save [options] images [images...]
-o
和>
表示输出到文件,redis.tar 为目标文件,redis:latest是源镜像名(name:tag),也可以直接用镜像的id。
docker save -o redis.tar redis:latest
# 或
docker save > redis.tar redis:latest
load 导入镜像
docker load [options]
其中-i
和<
表示从文件输入,会成功导入镜像及相关元数据,包括tag信息。
docker load -i redis.tar
# 或
docker load < redis.tar
export 和 import 导出导入 Docker 镜像
docker export [options] container
-o
表示输出到文件,redis-container.tar为目标文件,redis-container是源容器名(name)。
docker export -o redis-container.tar redis-container
docker import [options] file|URL|- [REPOSITORY[:TAG]]
docker import redis-container.tar redis:test
# 或
cat redis-container.tar | docker import - redis:test
export、import
和save、load
区别
export
命令导出的 tar 文件略小于save
命令导出的。export
命令是从容器(container)中导出 tar 文件,而save
命令则是从镜像(images)中导出。export
导出的文件再import
回去时,无法保留镜像所有历史(即每一层 layer 信息,不熟悉的可以去看 Dockerfile),不能进行回滚操作。save
是依据镜像来的,所以导入时可以完整保留下每一层 layer 信息。
加入网络
docker network create network-zookeeper
docker network connect network-zookeeper zookeeper
推送到私有仓库
构建
docker build -t dev/xxx:1.0 .
登录私有仓库
docker login xxx.com
在项目中标记镜像:
docker tag SOURCE_IMAGE[:TAG] xxx.com/项目名称/IMAGE[:TAG]
推送镜像到当前项目:
docker push xxx.com/项目名称/IMAGE[:TAG]
Docker tini 进程管理器
https://cloud-atlas.readthedocs.io/zh_CN/latest/docker/init/docker_tini.html
如果直接在ENTRYPOINT
中指定java程序运行,则java程序PID=1,当PID=1时jvm分析工具、Arthas等工具将无法使用,可以使用 tini 托管~
例如:
ENTRYPOINT ["tini"]
CMD java xxx
评论区