Ajattelin käyttää Dockeria rakentaakseni riippuvuudet jatkuvaan integrointiin (CI) palvelimelle, jotta minun ei tarvitse asentaa kaikkia suoritusaikoja ja kirjastoja itse agenteille.
Tämän saavuttamiseksi minun pitäisi kopioida kontin sisällä rakennetut build-artefaktit takaisin isäntäkoneeseen. Onko se mahdollista?
Voit kopioida tiedoston säiliöstä isäntäkoneeseen komennolla
docker cp <containerId>:/file/path/within/container /host/path/target
Tässä'on esimerkki:
$ sudo docker cp goofy_roentgen:/out_read.jpg .
Tässä goofy_roentgen on säiliön nimi, jonka sain seuraavalla komennolla:
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1b4ad9311e93 bamos/openface "/bin/bash" 33 minutes ago Up 33 minutes 0.0.0.0:8000->8000/tcp, 0.0.0.0:9000->9000/tcp goofy_roentgen
Voit myös käyttää (osaa) Säiliön ID:stä. Seuraava komento vastaa ensimmäistä komentoa
$ sudo docker cp 1b4a:/out_read.jpg .
Asenna "volume" ja kopioi artefaktit sinne:
mkdir artifacts
docker run -i -v ${PWD}/artifacts:/artifacts ubuntu:14.04 sh << COMMANDS
# ... build software here ...
cp <artifact> /artifacts
# ... copy more artifacts into `/artifacts` ...
COMMANDS
Sitten kun rakentaminen päättyy ja kontti ei ole enää käynnissä, se on jo kopioinut artefaktit rakentamisesta isännän artifacts
-hakemistoon.
Varoitus: Kun teet näin, saatat törmätä ongelmiin, joissa docker-käyttäjän käyttäjätunnus vastaa nykyisen käynnissä olevan käyttäjän käyttäjätunnusta. Toisin sanoen /artifacts
:n tiedostot näytetään sen käyttäjän omistamiksi, jolla on docker-säiliön sisällä käytetyn käyttäjän UID. Tämän voi kiertää käyttämällä kutsuvan käyttäjän UID:tä:
docker run -i -v ${PWD}:/working_dir -w /working_dir -u $(id -u) \
ubuntu:14.04 sh << COMMANDS
# Since $(id -u) owns /working_dir, you should be okay running commands here
# and having them work. Then copy stuff into /working_dir/artifacts .
COMMANDS
Kiinnitä nide, kopioi artefaktit, säädä omistajan tunnus ja ryhmän tunnus:
mkdir artifacts
docker run -i --rm -v ${PWD}/artifacts:/mnt/artifacts centos:6 /bin/bash << COMMANDS
ls -la > /mnt/artifacts/ls.txt
echo Changing owner from \$(id -u):\$(id -g) to $(id -u):$(id -u)
chown -R $(id -u):$(id -u) /mnt/artifacts
COMMANDS