docker 入门
构建jar
- openjdk
docker pull openjdk:8-jre
docker run -it --entrypoint bash openjdk:8-jre
- build jar image
pom.xml
<build>
<finalName>web-demo</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
docker build -t web-demo:lastast .
Jenkins
version: '3'
services:
jenkins:
container_name: "jenkins"
image: jenkins:2.32.3-alpine
ports:
- "8081:8080"
- "50000:50000"
volumes:
- /data/docker/jenkins/:/data/jenkins
environment:
- JENKINS_ADMIN_ID=root
- JENKINS_ADMIN_PW=123456
- JENKINS_MODE=master
restart: "no"
touch: cannot touch ‘/var/jenkins_home/copy_reference_file.log’: Permission denied Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?
需要修改下目录权限, 因为当映射本地数据卷时,/home/docker/jenkins目录的拥有者为root用户,而容器中jenkins user的uid为1000
执行如下命令即可:
chown -R 1000:1000 /home/docker/jenkins
commit
将容器当前状态做成镜像。
docker commit -p 容器id tag
save/load 镜像
docker save imageId > xx.tar
Dockerfile
FROM fight139/nginx:latest
ADD index.html /usr/share/nginx/html/index.html
EXPOSE 80
EVN/RUN指令
RUN构建镜像执行的命令
FROM centos
EVN key value
RUN yum install curl
CMD命令 ENTRYPOINT命令
启动容器时执行的命令
网络模型
- NAT
- NONE
- HOST
- 联合网络
docker run -it --name demo1 --rm --net=container:containerId
容器内安装软件
- 更新源
tee /etc/apt/sources.list << EOF
deb http://mirrors.163.com/debian/ jessie main non-free contrib
deb http://mirrors.163.com/debian/ jessie-updates main non-free contrib
EOF
- 安装
apt-get update
apt-get install curl
常用命令
镜像
docker images
docker search mysql
docker pull mysql:5.7
docker rmi 镜像id
docker rmi $(docker images -aq) 删除所有镜像
根据仓库查询
docker images --filter "reference=nginx"
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest bc9a0695f571 8 days ago 133MB
容器
docker run -it image
-i 进入容器, docker run -it centos /bin/bash
--name=name 容器名称
-d 后台运行
Ctrl+P+Q:退出容器,不关闭容器 ,
docker rm -rf 容器id
容器的启动和停止
docker start 容器id
docker restart id
docker stop id
docker kill id
docker run -d --name=hello hello-world
docker rm -f $(docker ps -aq --filter "name=hello")
docker run -it --rm tomcat:9.0
--rm 当停止容器后,一般用来测试,用完及删除 stop后自动删除容器
常用其他命令
docker run -d centos
查看日志
docker logs --tail -ft 200 id
-tf t:timestemp f:format
docker top id 查看容器内部的进程信息
# docker top b1baec2df55c
UID PID PPID C STIME TTY TIME CMD
root 1209 1192 0 15:00 ? 00:00:01 /portainer
docker inspect 查看容器的详细信息
-c 参数
进入容器
docker exec -it id /bin/bash 开启新的终端,可以在里面操作
docker attach id 进入容器正在执行的终端
拷贝容器内的文件
docker cp 容器id:/root/a.txt /root/a.txt
安装nginx
docker pull nginx
docker run -d --name nginx01 -p 8888:80 nginx
外部端口:容器端口 映射
数据卷
容器内部的文件和外部做映射
- nginx的配置文件修改,在外部处理
- tomcat的war包在外部替换,然后重启容器即可 将容器内的webapps做映射
docker stack deploy
默认使用stack会提醒
this node is not a swarm manager. Use "docker swarm init
需要做配置:
[root@docker ~]# vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --containerd=/run/containerd/containerd.sock #修改这一行内容
[root@docker ~]# systemctl daemon-reload
[root@docker ~]# systemctl restart docker
浙公网安备 33010602011771号